为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

人到中年有点甜 2019-05-03 22:12:35
表中有个字段为“日期”,如下:日期-------2016-3-172016-5-222017-1-92017-7-82018-5-3…我知道,按年份分组统计,语句是这样的:SELECT Year(日期) AS 年份, ……, COUNT(*)FROM 表名……GROUP Year(日期)现在的需求是,一般的年份,还是跟上面一样按年份分组统计,如果 年份=2017 ,就要分别统计“2017-05-01以前” 和 “2017-05-01至年底”两个期间的数据。请问可以实现吗?
查看完整描述

3 回答

?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

我觉得,这种需求,应该分开来做,按照你的说法,第一次,将特殊年份去掉,只计算普通年份,第二次只计算特殊年份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)

查看完整回答
反对 回复 2019-05-03
?
皈依舞

TA贡献1851条经验 获得超3个赞

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

查看完整回答
反对 回复 2019-05-03
?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

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)
其实是一样的,就是把原表改了一下,只是这两种情况是比较好改的,如果有三年或者四年是需要进行这样的分组,那就麻烦了。如果有这种情况,建议在表中加一个标示字段,那样就能简单一些了。

查看完整回答
反对 回复 2019-05-03
  • 3 回答
  • 0 关注
  • 1265 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信