0

我在 OrientDB 中有以下 sql 查询来查找社交网络中最活跃的客户的姓名:

SELECT name
FROM Customer
Where id in (Select id, count(id) as cnt
             from (Select IN('PersonHasPost').id[0] as id
                   From Post
                   Where creationDate>= date( '2012-10-01', 'yyyy-MM-dd')
                  )
             Group by id
             Order by cnt DESC 
             limit 10
            )
GROUP BY id;

但是,此查询不返回任何结果。当我单独运行子查询时,它确实给了我 10 个最活跃的客户的 ID,以及帖子的数量,这让我觉得 in 运算符有问题。我在这里做错了什么?我在 OrientDB 3.0.5 上运行此查询。

4

1 回答 1

0

我可以立即看到一些问题。尝试这个:

SELECT name
FROM Customer
Where id in (Select id
             from (Select IN('PersonHasPost').id[0] as id
                   From Post
                   Where creationDate>= date('2012-10-01', 'yyyy-MM-dd')
                  ) p
             Group by id
             Order by count(*) DESC 
             limit 10
            );

笔记:

  • 您的子查询返回两列,但IN只需要 1 列。
  • 某些数据库需要派生表的表别名,因此这也可能是一个问题。
  • 外层GROUP BY不匹配SELECT。我不确定你真正想要什么,但我不认为聚合或重复消除是必要的。
于 2021-03-24T15:45:29.303 回答