在多列中查找最高分

时间:2011-09-09 23:42:22

标签: mysql multiple-columns

如果我的DATA样本是

team name  score1  score2
Adele's     15      18
Madonna   16       3
Britanny    9        12

如何使用两列获得前5个分数列表 - 我的输出应该是

Adele's   18
Madonna   16
Adele's   15
Britanny  12

3 个答案:

答案 0 :(得分:2)

Derek Kromm的答案需要稍作修改,以避免在前5名球队中有两个相同分数时出现错误(例如,与示例相同,除了Madonna score1和score2都是16)。 union的默认行为是删除重复的行,因此只保留其中一个分数。基于这个问题,我认为这不是理想的行为。在联合中添加'all'关键字可以防止此错误。

select * from (
  select team, score1 from tbl
  union all select team, score2 from tbl) a
order by score1 desc
limit 5;

我会将此作为对Derek Kromm答案的评论,但我没有足够的声誉这样做。对不起,如果将其作为答案发布,则不是正确的礼仪。

答案 1 :(得分:1)

SELECT "team name" AS team_name, GREATEST(score1, score2) AS max_score FROM users ORDER BY max_score DESC LIMIT 5

纯粹作为旁注,如果可以的话,值得将“团队名称”列重命名为数据库中的team_name,因为在查询和处理数据时,事情会变得更加容易:)

答案 2 :(得分:1)

您可以使用UNION获取所有团队和分数的列表。然后,使用ORDERLIMIT获得前5名。

select * from (
  select team, score1 from tbl
  union select team, score2 from tbl) a
order by score1 desc
limit 5;