2014-09-21 43 views
0

我正在學習SQL查詢並有如下問題SQL:如何總結數十年?

「十年是連續十年的序列,例如1982年,1983年...... 1991年。每十年計算DBLP中的出版物總數in那十年。「

我已經想出了每年的計數一個臨時表select count(id) as cnt, year from publication group by year

因此,下一步是總結一年爲十年的CNT。經過一番研究,我發現我可以使用運營商的運營商。不過,我仍然需要逐個指定範圍。有沒有更好的方法來做到這一點? (年的範圍是1900年 - 2015年)

非常感謝。

回答

0

我只會把年份除以10,然後發言(這可能是隱含的,但我對MySQL不是很熟悉)。

SELECT (FLOOR(Year/10) * 10) AS Decade, COUNT(id) AS Cnt 
FROM Publication 
GROUP BY FLOOR(Year/ 10) 

這種方法的訣竅是,我假設你想1900-19091910-19191920-1919...2010-2015。如果你的「連續十年」規則不是那樣的話,你就必須加入一些算術。但它聽起來應該是這樣,即使它不是這對用戶來說可能更理想。

+0

是的,非常感謝FLOOR方法。 – Mona 2014-09-21 02:14:33

0

經過一番研究,我發現GROUP BY和LEFT()可以提供很多幫助。

select LEFT(year, 3) as decade , sum(cnt) from 
(select count(id) as cnt, year from publication group by year) 
as T1 
group by LEFT(year, 3) 
; 

結果是

十年CNT

NULL 6 
193 55 
194 139 
195 1066 
196 8066 
197 28449 
198 93203 
199 359628 
200 1249767 
201 947365 

,就請給你的建議,如果有更好的方法來做到這一點。謝謝。