問題#14 SQLZoo 爲表 諾貝爾(年,主題,獲獎者) 竟把 「顯示1984年的獲獎者和主題主題和獲獎者的名字排列,但名單化學與物理最後一次。」如何在特定序列中列出mysql查詢結果?
我的解決辦法是
SELECT winner, subject
FROM nobel
WHERE yr=1984
ORDER BY subject,winner
但它不會在最後列出化學和物理。 有沒有辦法做到這一點? 以及如何按特定順序排序字段?
問題#14 SQLZoo 爲表 諾貝爾(年,主題,獲獎者) 竟把 「顯示1984年的獲獎者和主題主題和獲獎者的名字排列,但名單化學與物理最後一次。」如何在特定序列中列出mysql查詢結果?
我的解決辦法是
SELECT winner, subject
FROM nobel
WHERE yr=1984
ORDER BY subject,winner
但它不會在最後列出化學和物理。 有沒有辦法做到這一點? 以及如何按特定順序排序字段?
使用可以使用CASE
:
SELECT winner, subject
FROM nobel
WHERE yr=1984
ORDER BY
CASE
WHEN subject IN ('Physics','Chemistry') THEN 1
ELSE 0
END ASC,
subject,
winner
編輯:
這是初級相同Gordon Linoff Solution,但是如果使用多個規則需要被擴展到另一對象。 IN
只允許2種方式:false/true。
ORDER BY
CASE
WHEN subject IN ('Physics','Chemistry') THEN 2
WHEN subject IN ('Medicine','Literature') THEN 1
ELSE 0
END ASC,
subject,
winner
您可以將其他密鑰添加到order by
。對於此特定目的:
order by (subject in ('Chemistry', 'Physics')),
subject, winner
第一個條件是一個布爾表達式,其值爲1(對於true)或0(對於false)。因此,這些錯誤出現在trues之前。
select subject, winner,yr
from nobel
where yr=1984
order by subject in ('Chemistry','Physics'),subject,winner
SELECT winner, subject
FROM nobel
WHERE yr = 1984
ORDER BY subject IN ('Chemistry', 'Physics'), subject, winner
SELECT winner, subject
FROM nobel
WHERE yr=1984
ORDER BY
case when subject IN ('Physics','Chemistry') then 0
ELSE 1
END desc,subject,winner
但是我們如何確保假trues之前出現?我們不應該在(「化學」,「物理學」)中使用主題 – dshri
@SHRIKANTDANGI。 。 。這就是這個'order by'所做的。 –