gpt4 book ai didi

mysql - SQL - 查询查找最受欢迎的好友

转载 作者:行者123 更新时间:2023-11-29 11:04:31 25 4
gpt4 key购买 nike

我有一个 MySQL 图中的边表。我需要一个查询来查找某个人最受欢迎的 friend 。有人可以帮我吗?以下是一些详细信息:

mysql> describe edges;
+--------------+--------------+------+-----+-------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+--------------+------+-----+-------------------+----------------+
| ID | int(11) | NO | PRI | NULL | auto_increment |
| from_node_id | int(11) | NO | | NULL | |
| to_node_id | int(11) | NO | | NULL | |
+--------------+--------------+------+-----+-------------------+----------------+
3 rows in set (0.12 sec)

基本上,如果 A 有 3 个 friend ,B、C 和 D - 我希望能够根据 A 的 friend 数量对他们进行排名。所以基本上我可以找到 A 的哪些 friend 最受欢迎:)

如果可能的话,我想在不使用嵌套查询的情况下执行此操作,以便执行速度很快。 table 很大!

还有一个节点表,但我相信您不需要它来运行此查询:) 任何帮助将不胜感激!

编辑:这是一些示例数据和示例结果:

输入表示例

+----+--------------+------------+
| id | from_node_id | to_node_id |
+----+--------------+------------+
| 1 | 1 | 2 |
| 2 | 1 | 3 |
| 3 | 1 | 4 |
| 4 | 5 | 2 |
| 5 | 6 | 2 |
| 6 | 7 | 3 |
+----+--------------+------------+

节点1的示例输出表。显示每个 friend 的受欢迎度

+---------+-------------+
| node_id | num_friends |
+---------+-------------+
| 2 | 3 |
| 3 | 2 |
| 4 | 1 |
+---------+-------------+

最佳答案

获取派生表中每个 to_node_id 的计数,并将其与原始表连接以根据 from_node_id 进行过滤。

select t.to_node_id,x.num_friends
from (select to_node_id,count(*) as num_friends
from t
group by to_node_id) x
join t on t.to_node_id=x.to_node_id
where t.from_node_id=1
order by x.num_friends desc,t.to_node_id

另一种使用自连接的方法。

select t1.to_node_id,count(*) as num_friends
from t t1
join t t2 on t1.to_node_id=t2.to_node_id
where t1.from_node_id=1
group by t1.to_node_id
order by num_friends desc,t1.to_node_id

关于mysql - SQL - 查询查找最受欢迎的好友,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41625198/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com