我正在尝试编写一个jpql查询来选择评论最多的用户。如果两个用户具有相同数量的评论,我想同时选择它们。
我试过这个,就像这样:
SELECT
c.user, COUNT(c.id) as commentCount
FROM
Comment c
WHERE
commentCount = (SELECT MAX(SIZE(user.comments)) FROM User user)
GROUP BY
c.user
和此:
SELECT
c.user
FROM
Comment c
GROUP BY
c.user
HAVING
COUNT(c) = (SELECT MAX(SIZE(user.comments)) FROM User user)
这两种方法都不奏效。我需要做什么?
答案 0 :(得分:5)
这是一个解决方案:
SELECT
u
FROM
User u
WHERE
u.comments.size = (SELECT MAX(u2.comments.size) FROM User u2)
答案 1 :(得分:0)
如果您使用的是Oracle,这应该可以使用:
select u from User u where size(u.comments) = (
select max(count(c.id))
from User u2 inner join u2.comments c
group by u2.id
)
但MySQL和SQL Server不支持嵌套聚合函数,在这种情况下为max(count(c.id))
。建议使用子查询,但使用HQL时,不能在from子句中包含子查询。所以我建议您手动执行此操作,即加载所有用户:
select u, size(u.comments)
from User u
并循环浏览列表。