问题描述
我在 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 上运行这个查询。
解决方法
我可以立即看到一些问题。试试这个:
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
不匹配。我不确定您真正想要什么,但我认为没有必要进行聚合或重复消除。