我有以下两个表的架构:
Users(first_name,last_name,age,gender)
Friends(friend_one,friend_two)
其中first_name
是Users
中的关键字,而“朋友”表格中的值(friend_one
和friend_two
)实际上是first_name
取自'用户'表。 (意味着引用完整性在Users(first_name)
和Friends(friend_one,friend_two)
之间保持不变。
我正在尝试获得“十大最受欢迎的朋友”,这意味着拥有最多朋友的10位用户拥有正确的MySQL查询。
我的第一次尝试是:
SELECT first_name,COUNT(first_name)
FROM users,friends
WHERE first_name=friend_one OR first_name=friend_two
GROUP BY first_name;
首先,我不确定这是否是正确的查询,更明显的问题是它不会产生前10名。
我知道SQL有关键字TOP
,但我使用的是MySQL
以上查询是否正确?如果没有,为什么,我如何获得前10名?
答案 0 :(得分:1)
以下是我将如何编写您的查询版本:
SELECT u.first_name, COUNT(first_name) as NumFriends
FROM users u join
friends f
on u.first_name = f.friend_one OR u.first_name = f.friend_two
GROUP BY u.first_name
ORDER BY NumFriends
LIMIT 10;
如果friends
是对称关系,任何两个朋友之间只有一行,这将有效。如果朋友可以有多个行(因此person1可以为person2,反之亦然),那么这可能会超过该数量。目前尚不清楚这是否可能。
请注意,我“修复”了查询以使用正确的join
语法,添加了表名称缩写的表别名以及order by
和limit
子句。