两张桌子 - 玩家,结果
在播放器表中 - id int(11),name varchar(50)
结果表中的- id int(11);
答案 0 :(得分:-1)
SELECT p.id, p.name, COUNT(o.id) `number_of_times` FROM player p
LEFT JOIN outcome o ON (p.id = o.player_of_match)
GROUP BY p.id
ORDER BY COUNT(o.id) DESC
LIMIT 1
答案 1 :(得分:-1)
另一种方式(如果你只想要名字):
SELECT name
FROM player
WHERE id IN (
SELECT TOP 1 player_of_match
FROM outcome
GROUP BY player_of_match
ORDER BY count(player_of_match) DESC
)
或者:
SELECT TOP 1 b.name
FROM outcome a, player b
WHERE a.player_of_match = b.id
GROUP BY b.name
ORDER BY count(player_of_match) DESC
Honzy的回答也是有效的,但您必须在p.name
条款中加入GROUP BY
,因为它不是汇总字段。
编辑道歉 - 上面的查询是SQL Server,只是意识到你标记了MySql,我不认为你可以使用TOP 1语法 - 最后用LIMIT 1替换它。
海报还要求列出所有球员的名字 - 如果有平局 - 在这种情况下你可能需要按照以下方式做一些事情:
SELECT name
FROM player
WHERE id IN (
SELECT player_of_match FROM outcome
GROUP BY player_of_match
HAVING COUNT(player_of_match) = (
SELECT TOP 1 COUNT(player_of_match) from outcome
GROUP BY player_of_match
ORDER BY COUNT(player_of_match) DESC
)
)
我确定这可能是一种更优雅的方式,但它完成了工作(这是SQL Server符号再次,在MySql TOP中将再次可能必须用LIMIT表示法替换)。
答案 2 :(得分:-1)
SELECT MAX(mvp), mvpselect.name FROM (
SELECT player.*, COUNT(outcome.player_of_match) AS mvp FROM outcome
INNER JOIN player
ON outcome.player_of_match = player.id
GROUP BY player.id
) AS mvpselect
答案 3 :(得分:-1)
SELECT p.name
FROM outcome o
LEFT JOIN player p on p.id=player_of_match
GROUP BY player_of_match
ORDER BY COUNT(player_of_match) DESC
LIMIT 1;