带有子查询的JPQL,用于选择最大计数

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)

两种方法都不奏效.我需要做什么?

sto*_*fln 5

这是一个解决方案:

SELECT
  u
FROM 
  User u
WHERE
  u.comments.size = (SELECT MAX(u2.comments.size) FROM User u2)
Run Code Online (Sandbox Code Playgroud)


lun*_*unr 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
)
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)

并循环遍历列表。