用于查找大多数朋友的SQL查询?

时间:2013-02-24 10:58:12

标签: sql sqlite

我有一个朋友表,其中有两列, id1 ,这是学生的ID, id2 是学生ID2的ID。

朋友
列名: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 )

这是一个简单的查询,但我得到的结果不正确。谁能指出我做错了什么?

2 个答案:

答案 0 :(得分:1)

确实是个好问题。我重新格式化了您的查询以使其更具可读性,并且我已经在SQL Server和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);

答案 1 :(得分: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