3

私は、学生のIDであるid1と学生id2のIDであるid2の2つの列を持つ友人のテーブルを持っています。

フレンド
列名: id1 -> id2

私は最大の友達を持つ学生を見つけなければなりません。

次の形式でデータを取得しています:
person(id) --> pp および ppp の友人の数。
グループを友人に適用し、
そのサブクエリに対して、カウントが最も高い学生を選択しています。

これが私のクエリです:

select * from
(select kk.id1 as id3, count(*) as b from friend kk group by kk.id1) pp
where not exists 
(select * from
  (select kk1.id1 as id2, count(*) as b1 from friend kk1 group by kk1.id1) ppp
 where ppp.b1 > pp.b )

これは簡単なクエリですが、間違った結果が得られます。誰かが私が間違ったことを指摘できますか?

4

2 に答える 2

1

確かに良い質問です。クエリを少し読みやすくするために再フォーマットし、SQLServerとSQLiteの両方でテストしました。SQL Serverでは、クエリは期待どおりに動作するように見えますが、SQLiteではそうではありません。私はこれについての説明を(まだ)見つけることができません、まだそれに取り組んでいます...

SELECT *
FROM   (SELECT F1.id1 as id3,
               count(*) as Count1
        FROM   Friend AS F1
        GROUP BY F1.id1) sub1
WHERE  NOT EXISTS ( SELECT *
                    FROM   (SELECT F2.id1 as id2,
                                   count(*) as Count2
                            FROM   Friend AS F2
                            GROUP BY F2.id1) sub2
                    WHERE  sub2.Count2 > sub1.Count1);
于 2013-02-25T18:26:06.797 に答える
0
SELECT  A, COUNT(*) totalFriends
FROM
        (
            SELECT ID1 A, ID2 B FROM Friend
            UNION
            SELECT ID2 A, ID1 B FROM Friend
        ) s
GROUP   BY A
ORDER   BY totalFriends DESC
LIMIT 1
于 2013-02-24T11:00:19.670 に答える