7

jpql クエリを作成して、コメントが最も多いユーザーを選択しようとしています。2 人のユーザーのコメント数が同じ場合、両方を選択したいと考えています。

私はこれを試しました、このようなもの:

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)

どちらのアプローチも機能しません。ここで何をする必要がありますか?

4

3 に答える 3

6

ここに解決策があります:

SELECT
  u
FROM 
  User u
WHERE
  u.comments.size = (SELECT MAX(u2.comments.size) FROM User u2)
于 2014-03-27T21:23:18.763 に答える
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

リストをループします。

于 2013-04-11T22:39:03.710 に答える