SQL 按指定順序排列

問題:

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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章