2013-04-11 9 views
6

ほとんどのコメントを持つユーザーを選択するjpqlクエリを作成しようとしています。 2人のユーザーが同じ数のコメントを持っている場合は、両方を選択したいと思います。サブクエリで最大数を選択する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) 

どちらのアプローチが動作します。ここで何をする必要がありますか?

+1

あなたは動作しませんでしたと言うとき、あなたは2人のユーザーがコメントの同じ#を持っていたとき、それが唯一のユーザーを選択した意味ですか? – Victor

+0

あなたが試すことができます: 選択* s1の場所( コメントCからのcommentCount として c.user、COUNT(c.id)を選択)からs1.commentCount =(選択最大(s2.coomentCount)SELECTから c.user 、COUNT(c.id)as commentCount FROM コメントc)s2 – Victor

+0

何らかの形で間違っているため、「問合せを実行できませんでした」というメッセージが表示されます。ですから、最初は "不明な列" jobsCount "where句"を取得し、2番目のグループは無効です(HAVING部分を追加すると)。しかし、私は働くバージョンをどのように書くのか分からない。既に多くの異なるバージョンを試しました。 –

答えて

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 

とループします。ここで

+0

悲しいことに私はMySQLを使用していますが、名前付きのクエリ文を作成することはできます。その他のヒント? –

+0

ネイティブクエリを使用できます。 – lunr

5

は、ソリューションです:

SELECT 
    u 
FROM 
    User u 
WHERE 
    u.comments.size = (SELECT MAX(u2.comments.size) FROM User u2) 
+0

この回答に感謝します! –