选择奖牌订购的运动成绩

时间:2014-01-31 16:45:20

标签: sql sqlite

我有一张桌子:

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查询来获取按这种方式排序的国家/地区列表?

问候

2 个答案:

答案 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