我有一张桌子:
sport country place
ski swe 1
ski nor 2
ski rus 3
luge swe 1
luge usa 2
luge ger 3
bob nor 1
bob rus 2
bob ger 3
其中黄金为1,白银为2,青铜为3
现在,正常的差异化情景是国家列表,首先是最高金,然后是银,然后是铜。对于那个例子,它将是:
swe g:2 s:0 b:0 sum:2
rus g:0 s:1 b:1 sum:2
usa g:0 s:1 b:0 sum:1
nor g:0 s:0 b:2 sum:2
什么是SQL查询来获取按这种方式排序的国家/地区列表?
问候
答案 0 :(得分:1)
select
country,
sum(case when place = 1 then 1 else 0 end) as gold,
sum(case when place = 2 then 1 else 0 end) as silver,
sum(case when place = 3 then 1 else 0 end) as bronce,
count(*) as allmedals
from tab
group by country
为了对结果进行排序,您可以
order by sum(4 - place) desc -- weighted medals
答案 1 :(得分:0)
使用多个排序是关键:这里是查询。感谢用户:dnoeth
select
country,
sum(case when place = 1 then 1 else 0 end) as gold,
sum(case when place = 2 then 1 else 0 end) as silver,
sum(case when place = 3 then 1 else 0 end) as bronce,
count(*) as allmedals
from tab
group by country ORDER BY gold DESC, silver DESC, bronce DESC