2009-08-06 9 views
0

こんにちは私はSQLを初めて使っていて、ほとんどの友達(userId)とトップ5の "バンド"をどのように取得しようとしているのか理解しようとしています。 userIdとuserIdをPKとしbandTdをbandTdにしてPKとし、FKのuserIdとbandIdを持つバンドの友達を持っています。ほとんどの友人でトップ5

bandfriends 
userid | bandId 
--------------- 
1  | 1 
1  | 2 
1  | 3 

ありがとうございます!

mysql.orgでCOUNTとGROUP BYをよく読んで

答えて

0

あなたはこのような何か(私はそれをテストしていません)をお勧めします

SELECT bandId, COUNT(*) as fans FROM bandfriends 
ORDER BY fans DESC 
GROUP BY bandId 
LIMIT 5; 
+0

、トップ5バンディッド – Secko

+1

SQL ServerがLIMITをサポートしていませんを選択します。この答えは、MySQLのための右のように見えます。 –

+0

これは本当に私の問題を解決するのに役立ちました。 –

5
SELECT TOP 5 bandId, fanCount 
FROM 
    (SELECT bandId, COUNT(*) as fanCount 
    FROM bandfriends 
    GROUP BY bandId 
    ORDER BY COUNT(*) DESC) 

ます。また、必要に応じて指定することができますselect文にTIESを指定します。 thisおよびthisを参照してください。また

+0

+1私に "ネクタイ"を教えてください。私は恥ずかしく、私はすでにそれを知らなかった。 – Dusty

+0

サブセレクトでオーダーを使うことはできないと思います。これは、リレーショナル・モデルに再び入ります。それを外側のセレクトに移動する必要があります。 – neves

+0

@neves:私はあなたのコメントを理解していません。上位5を選択するには、リストを順序付けする必要があります。集計が必要なため、サブクエリで順序付けを行う必要があります。また、selectを使用してリレーショナル・モデルを中断することもできません。それを破ることはできません。 :-) –

2
select top 5 b.b_name, count(friends) as numOfFriends 
from bands b inner join link l on b.b_id = l.bands inner join 
friends f on f.f_id = l.friends 
group by b.b_name 
order by numOfFriends desc 

お友達のテーブル、バンドテーブルとリンクテーブルを持っている場合は、私の作品:)

関連する問題