如果我的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
答案 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
获取所有团队和分数的列表。然后,使用ORDER
和LIMIT
获得前5名。
select * from (
select team, score1 from tbl
union select team, score2 from tbl) a
order by score1 desc
limit 5;