【问题标题】:SQL query for finding a guy with most friends?SQL查询寻找一个朋友最多的人?
【发布时间】:2013-02-26 02:26:06
【问题描述】:

我有一个朋友表,它有两列,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 )

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

【问题讨论】:

  • 你得到什么不正确的结果?你能给我们举个例子,说明你表中的数据和预期的输出吗?
  • @Josien 它正在重新调整所有行,而不是选择具有最大计数的行

标签: sql sqlite


【解决方案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);

【讨论】:

  • 不客气 :-) 我希望找出导致差异的原因,这是一个有趣的问题...
【解决方案2】:
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

【讨论】:

  • 非常感谢,请您指出我做错了什么。我写的查询应该可以工作
猜你喜欢
  • 1970-01-01
  • 2015-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多