2014-09-21 78 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 

,就请给你的建议,如果有更好的方法来做到这一点。谢谢。