問題:
table-------nobel(yr, subject, winner)
找1984年的獲獎者(winner),按照獲獎項目(subject)升序排列,獲獎項目一樣的,按照獲獎者升序排列,並且當獲獎項目是Chemistry和Physics的放在後面,並升序排列。
(該問題來源–學SQL語句特別好的網站sqlzoo:SELECT from Nobel Tutorial)
查詢語句:
- 解法1:
select winner, subject
from nobel
where yr=1984
order by CASE WHEN subject IN ('Chemistry','Physics') THEN 1
ELSE 0 END,
subject,winner
case when 的語法可以參考CASE WHEN
- 解法2:
(SELECT winner,subject
FROM nobel where yr=1984 AND subject NOT IN ('Chemistry','Physics')
order by subject, winner limit 99999)
UNION
(select winner,subject from nobel
where yr=1984 AND subject IN ('Chemistry','Physics')
order by subject, winner limit 999999)
關於解法2 Limit 99999這一句必不可少,如果不寫它,UNION以後排序的結果就變了。
UNION的用法可以參見:SQL UNION 和 UNION ALL 操作符
- 解法3:
select winner, subject
from nobel
where yr=1984
order by subject IN ('Chemistry','Physics'),subject,winner