关于 SQL 语句查询“短信中每个人有多少个联系人”的写法,求教

2016-11-24 09:51:36 +08:00
 Jolly23

数据库 Postgresql

表描述:

公司内部短信交流表,存有发件人 id ,接收人 id

现在需要得到复杂网络数据:每个人有多少个联系过的人

例表:

sms_id | sender_id | receiver_id |

1 | 1001 | 1008 |

2 | 1003 | 1009 |

3 | 1001 | 1009 |

4 | 1002 | 1001 |

5 | 1008 | 1001 |

如何得到每个人联络过多少人的结果

结果举例:

sender_id | count

1001 | 2

1003 | 1

1002 | 1

1008 | 1

1872 次点击
所在节点    问与答
10 条回复
qiayue
2016-11-24 09:54:14 +08:00
你这个感觉是题目(作业?)而不是实际需求。
Jolly23
2016-11-24 09:57:53 +08:00
@qiayue 是需求,想写复杂网络的论文,然后自己列了一个单子,标明需要哪些数据,要从系统的 log 表提取数据分析一下,上面这问题就是其中的一组数据
kxjhlele
2016-11-24 09:58:52 +08:00
count(distinct receiver_id)
group by sender_id
kxjhlele
2016-11-24 10:01:03 +08:00
一个 公司内部短信交流表,我个人感觉算不上复杂网络,要是运营商级别的话,还是有分析的意思。
zjuhwc
2016-11-24 10:01:34 +08:00
select send_id, count(distinct reciver_id) from table group by send_id
Jolly23
2016-11-24 10:08:45 +08:00
@kxjhlele 非常感谢,实现了。嗯,规模跟运营商没法比,但也有 1.5w 员工和 15w 短信数据了,感觉还是有一定的分析的意义
Jolly23
2016-11-24 10:08:59 +08:00
@zjuhwc 非常感谢,可以实现,谢谢
ipconfiger
2016-11-24 10:11:51 +08:00
这种玩具量级的基本也就是作业了, 其实现实中根本就不是这么做的......... 😂😂😂😂😂😂😂
justfindu
2016-11-24 10:11:54 +08:00
其实你算错了 1001 有 3 个联系过的 = = 你考虑过么 1002 给 1001 发短信 也是联系
wyj12501
2016-11-24 10:26:56 +08:00
select send_id, count(1)
from (select distinct send_id, receive_id from table)
group by send_id;

搜到一篇优化文章,可能有用
https://www.oschina.net/translate/use-subqueries-to-count-distinct-50x-faster

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/322864

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX