3

我有一张朋友表,它有两列,id1是学生的 id,id2是学生 id2 的 id。

好友
列名:id1 -> id2

我必须找到有最多朋友的学生。

我以这种形式获取数据:
person(id) --> pp 和 ppp 中的朋友数,
通过在朋友上应用 group by
并且对于该子查询,我选择计数最高的学生。

这是我的查询:

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

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