写一个查询以显示已被宣布为匹配的玩家的玩家的姓名'最多次数

时间:2017-04-25 10:44:39

标签: mysql sql database

两张桌子 - 玩家,结果

在播放器表中 - id int(11),name varchar(50)

结果表中的

- id int(11);

4 个答案:

答案 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;
相关问题