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

时间:2013-04-11 19:40:32

标签: java sql hibernate jpql named-query

我正在尝试编写一个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)

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

2 个答案:

答案 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

并循环浏览列表。