How to return count of sub-query results as column in mysql
我有一个名为users的表,每个用户的主键为user_id。
我还有另一个表,称为friends,该表将用户链接为其他用户,成为朋友。
此friends表具有两列user_id和friend_id。 user_id列始终是两个user_id中的较低者,以防止重复。
我想执行一个查询以从users表中获取所有字段,但还要返回一个用户与另一个用户的共有的共同朋友的数量,作为另一个列的称为common_friends_count的列中的计数。
因此,基本上,如果我想知道每个用户与user_id 5有多少个共同的朋友,查询将从用户表中选择全部,并为每个用户执行子查询以查找共同的朋友并将计数返回为common_friends_count
它不漂亮,但是能成功。.
1 2 3 4 5 6 7 8 9 10 11 | 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; |
不确定这是做您想要的事情的最简单或最有效的方法,但是它可以工作:
1 2 3 4 5 6 | 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 |