2013-04-20 138 views
1

假設我們有一張表nobel(年,主題,贏家)。計算SQL中值的出現次數

我想得到一年當年迴歸的結果,當年的化學獎數字欄,當年的物理獎項數。

你會怎麼做?

SELECT yr, count(subject='Physics'), count(subject='Chemistry') FROM nobel GROUP BY yr 

不起作用。

+0

當你執行查詢時,你會得到什麼? – 2013-04-20 15:23:58

+0

當年獎勵總數的兩列 – LucasSeveryn 2013-04-20 15:25:04

回答

4

您的查詢不起作用,因爲條件返回值爲0或1,count計算非NULL值。

嘗試使用sum代替count

SELECT yr, sum(subject='Physics'), sum(subject='Chemistry') 
FROM nobel 
GROUP BY yr 

順便說一句,不是所有的數據庫處理的條件表達式爲整數。標準的語法是:

select yr, sum(case when subject = 'Physics' then 1 else 0 end) as NumPhysics, 
     sum(case when subject = 'Chemistry' then 1 else 0 end) as NumChemistry 
from nobel 
group by yr 

您還可以通過執行獲得多行相同的信息:

select yr, subject, count(*) 
from Nobel 
where subject in ('Physics', 'Chemistry') 
group by yr, subject 
+0

謝謝,那個作品! – LucasSeveryn 2013-04-20 15:25:56

1

不會在工作?

select yr, subject, count(*) awards 
from nobel 
where subject in ('physics', 'chemistry') 
group by yr, subject 
+0

它會的,但它不是我想要的,也許我沒有說我的問題是正確的,我想在那一年獲得一系列化學獎項,並在當年獲得一系列物理獎項 – LucasSeveryn 2013-04-20 15:35:05