Rol*_*ütz 6 java sql hibernate named-query jpql
我正在尝试编写一个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
Run Code Online (Sandbox Code Playgroud)
还有这个:
SELECT
c.user
FROM
Comment c
GROUP BY
c.user
HAVING
COUNT(c) = (SELECT MAX(SIZE(user.comments)) FROM User user)
Run Code Online (Sandbox Code Playgroud)
两种方法都不奏效.我需要做什么?
这是一个解决方案:
SELECT
u
FROM
User u
WHERE
u.comments.size = (SELECT MAX(u2.comments.size) FROM User u2)
Run Code Online (Sandbox Code Playgroud)
如果您使用的是 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
)
Run Code Online (Sandbox Code Playgroud)
max(count(c.id))
但在这种情况下,MySQL 和 SQL Server 不支持嵌套聚合函数。建议使用子查询,但使用 HQL 时,from 子句中不能包含子查询。所以我建议你手动执行此操作,即加载所有用户:
select u, size(u.comments)
from User u
Run Code Online (Sandbox Code Playgroud)
并循环遍历列表。