2013-02-24 55 views
3

我有一張列有兩列的朋友,id1這是學生的ID和id2是學生id2的ID。用於查找與大多數朋友的人的SQL查詢?

朋友
列名:ID1 - > ID2

我一定要找到學生最大的朋友。

我以這種形式獲得的數據:
人(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) 

這是一個簡單的查詢,但我得到不正確的結果。任何人都可以指出我做錯了什麼嗎?

+0

你得到了什麼不正確的結果?你能否給我們一個表格中數據的例子和預期的輸出? – Josien 2013-02-24 21:59:34

+0

@Josien它是重新調整所有的行,而不是選擇那些最大的行數 – Dude 2013-02-24 22:58:22

回答

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); 
+0

非常感謝!我現在可以放鬆:D – Dude 2013-02-25 20:12:11

+0

非常歡迎:-)我希望找出造成這種差異的原因,這是一個有趣的問題...... – Josien 2013-02-25 22:32:33

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 
+0

非常感謝,你能否指出我做錯了什麼。我寫的查詢應該可以工作 – Dude 2013-02-24 11:23:12