这是我朋友桌的样本
ID FRIENDID
1001 1110
1001 1005
1002 1207
1002 1188
1005 1107
1005 1001 我正试图回答这些问题。
现在第一个很简单
SELECT count(ID) FROM FRIENDS
WHERE friendID = 1005;第二个我想出了这个
SELECT count(ID) FROM FRIENDS
WHERE friendID IN
(SELECT ID from FRIENDS where friendID = 1005) AND NOT ID = 1005;第三和第四,我感到困惑,并提出了这个,但它不起作用。不知道什么是对的?我认为我需要在那里使用DISTINCT来确保没有重复。
SELECT count(ID) FROM FRIENDS
WHERE friendID IN
((SELECT ID from FRIENDS where friendID = 1005) AND NOT ID = 1005
WHERE friendID IN
(SELECT ID from FRIENDS where friendID = 1005) AND NOT ID = 1005);发布于 2018-08-04 07:00:20
这可以由count()函数完成:
SELECT f1.id, count(DISTINCT f1.friendid) AS friends_cnt
FROM FRIENDS AS f1
WHERE f1.id = 1005;这可以通过将表与自身连接起来来完成:
SELECT f1.id, count(DISTINCT f2.friendid) AS f_friends_cnt
FROM FRIENDS AS f1
JOIN FRIENDS AS f2 ON f2.id = f1.frienfid
AND f2.id != f1.id -- to avoid recursion
WHERE f1.id = 1005;将表与其自身连接两次:
SELECT f1.id, count(DISTINCT f3.friendid) AS f_f_friends_cnt
FROM FRIENDS AS f1
JOIN FRIENDS AS f2 ON f2.id = f1.frienfid
AND f2.id != f1.id
JOIN FRIENDS AS f3 ON f3.id = f2.frienfid
AND f3.id != f1.id
AND f3.id != f2.id
WHERE f1.id = 1005;将表与其自身连接三次:
SELECT f1.id, count(DISTINCT f4.friendid) AS f_f_f_friends_cnt
FROM FRIENDS AS f1
JOIN FRIENDS AS f2 ON f2.id = f1.frienfid
AND f2.id != f1.id
JOIN FRIENDS AS f3 ON f3.id = f2.frienfid
AND f3.id != f1.id
AND f3.id != f2.id
JOIN FRIENDS AS f4 ON f4.id = f3.frienfid
AND f4.id != f1.id
AND f4.id != f2.id
AND f4.id != f3.id
WHERE f1.id = 1005;发布于 2018-08-04 06:43:51
你可能多次数同一个朋友,因为同一个人可能是原人不同朋友的朋友。
将SELECT COUNT(ID)更改为SELECT COUNT(DISTINCT ID),它不会计算相同的ID两次。
https://stackoverflow.com/questions/51682323
复制相似问题