繁体   English   中英

如何在MySQL中将子查询结果的计数作为列返回

[英]How to return count of sub-query results as column in mysql

我有一个名为users的表,每个用户的主键为user_id。

我还有另一个表,称为Friends,该表将用户链接为其他用户。

该好友表具有两列user_id和friend_id。 user_id列始终是两个user_id中的较低者,以防止重复。

我想执行一个查询以从users表中获取所有字段,但还返回一个用户与另一个用户有多少个共同朋友,作为另一个列中称为common_friends_count的列的计数。

因此,基本上,如果我想知道每个用户与user_id 5有多少个共同的朋友,该查询将从用户表中选择全部,并为每个用户执行一个子查询以查找共同的朋友并以count_intermit_friends_count的形式返回计数

它不漂亮,但能成功。

SELECT `u`.`user_id`, `f`.`friend_id`, `m`.`mutualFriends`
FROM `users` as `u`, `friends` as `f` 
JOIN (
   SELECT COUNT(*) as `mutualFriends`, `users`.`user_id`
   FROM `users`, `friends` 
   WHERE `friends`.`user_id` = `users`.`user_id` 
   GROUP BY `users`.`user_id`
   ) as `m` 
   ON `m`.`user_id` = `f`.`friend_id` 
WHERE `f`.`user_id` = `u`.`user_id` 
AND `u`.`user_id` = 5;

不知道这是做您想要的事情的最简单或最有效的方法,但是它可以工作:

select u.user_id, count(1)
from users u
join friends f on f.user_id = u.user_id or f.friend_id = u.user_id
join friends mutual on (mutual.user_id = 5 and mutual.friend_id = f.friend_id and mutual.friend_id != u.user_id) or (mutual.friend_id = 5 and mutual.user_id = f.user_id and mutual.user_id != u.user_id)
where u.user_id != 5
group by u.user_id

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM