SQL: 一般情况按年分组,特殊年份按指定日期分组,SELECT语句怎么写?

表中有个字段为“日期”,如下:

日期
-------
2016-3-17
2016-5-22
2017-1-9
2017-7-8
2018-5-3


我知道,按年份分组统计,语句是这样的:

SELECT Year(日期) AS 年份, ……, COUNT(*)
FROM 表名
……
GROUP Year(日期)

现在的需求是,一般的年份,还是跟上面一样按年份分组统计,如果 年份=2017 ,就要分别统计“2017-05-01以前” 和 “2017-05-01至年底”两个期间的数据。

请问可以实现吗?

人到中年有点甜
浏览 1266回答 3
3回答

素胚勾勒不出你

我觉得,这种需求,应该分开来做,按照你的说法,第一次,将特殊年份去掉,只计算普通年份,第二次只计算特殊年份5月1日以前的,第三次计算特殊年份5月1日以后的。比如,数据从2001年至2019年都有,其中2015,2017,2019年为特殊年。则第一次不计算这三个年份。1.select substr(year,1,4),count(1) from table where substr(year,1,4)!=2015 and substr(year,1,4)!=2017 and substr(year,1,4)!=2019 goup by substr(year,1,4)

皈依舞

如果只是一年的话还好说,如果是三四年那就麻烦了,但是如果每一年都要这样还反而简单了,最怕的就是某些特殊要求,那样不好写。我写一个一年的,写一个全部的。这是一年的,可能casewhen不能这么直接放在groupby的后面,那么可以先这么改造一下表,然后外面在套一层select就可以实现了。

摇曳的蔷薇

select concat(year(日期),case when month(日期)<5 then 1 else 2 end) 组合字段,count(*) from table group by concat(year(日期),case when month(日期)<5 then 1 else 2 end)其实是一样的,就是把原表改了一下,只是这两种情况是比较好改的,如果有三年或者四年是需要进行这样的分组,那就麻烦了。如果有这种情况,建议在表中加一个标示字段,那样就能简单一些了。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

MySQL