首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >mysql -朋友的朋友

mysql -朋友的朋友
EN

Stack Overflow用户
提问于 2018-08-04 04:06:01
回答 2查看 398关注 0票数 0

这是我朋友桌的样本

代码语言:javascript
运行
复制
ID      FRIENDID
1001    1110    
1001    1005    
1002    1207    
1002    1188    
1005    1107    
1005    1001    

我正试图回答这些问题。

  • 特定人的朋友数。
  • 某一特定人朋友的朋友数。
  • 特定人的朋友数。
  • 特定人的朋友数。

现在第一个很简单

代码语言:javascript
运行
复制
SELECT count(ID) FROM FRIENDS
WHERE friendID = 1005;

第二个我想出了这个

代码语言:javascript
运行
复制
SELECT count(ID) FROM FRIENDS
WHERE friendID IN
(SELECT ID from FRIENDS where friendID = 1005) AND NOT ID = 1005;

第三和第四,我感到困惑,并提出了这个,但它不起作用。不知道什么是对的?我认为我需要在那里使用DISTINCT来确保没有重复。

代码语言:javascript
运行
复制
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);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-04 07:00:20

  • 特定人的朋友数。

这可以由count()函数完成:

代码语言:javascript
运行
复制
SELECT f1.id, count(DISTINCT f1.friendid) AS friends_cnt
  FROM FRIENDS AS f1
 WHERE f1.id = 1005;
  • 某一特定人朋友的朋友数。

这可以通过将表与自身连接起来来完成:

代码语言:javascript
运行
复制
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;
  • 某人的朋友数

将表与其自身连接两次:

代码语言:javascript
运行
复制
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;
  • 特定人的朋友数。

将表与其自身连接三次:

代码语言:javascript
运行
复制
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;
票数 1
EN

Stack Overflow用户

发布于 2018-08-04 06:43:51

你可能多次数同一个朋友,因为同一个人可能是原人不同朋友的朋友。

SELECT COUNT(ID)更改为SELECT COUNT(DISTINCT ID),它不会计算相同的ID两次。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51682323

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档