目录

oracle group by分类查询汇总 没数据的时候让此项显示为0

# 1.表数据

表名:table

id date
1 2019-05
2 2019-06
3 2019-04
4 2019-06

# 2.需求

现在要求按照指定五个月份统计每个月的数量,这五个月份为: ('2019-02','2019-03','2019-04','2019-05','2019-06') 查询出来的数据应该是这样的

date num
2019-02 0
2019-03 0
2019-04 1
2019-05 1
2019-06 2

# 3.实现

3.1按照常规写法

select date,count(*) as num from  table
where DATE in ('2019-02','2019-03','2019-04','2019-05','2019-06')
group by dates
order by dates desc
1
2
3
4

然后发现出来的数据是这样的

date num
2019-04 1
2019-05 1
2019-06 2

3.2解决 我想到的解决思路是将这几个月份查成一张临时表做一个left join 这样月份就固定会显示在那,再使用nvl判断num为NULL的时候添加为0

select A.date,nvl(num,0) 
from (
--固定写法,按照逗号分隔成一列
	SELECT DISTINCT REGEXP_SUBSTR ('2019-02,2019-03,2019-04,2019-05,2019-06','[^,]+',1,LEVEL) as date
	FROM DUAL
	CONNECT BY REGEXP_SUBSTR ('2019-02,2019-03,2019-04,2019-05,2019-06','[^,]+',1,LEVEL) IS NOT NULL
) A
LEFT JOIN 
(
--归类查询
	select count(*) as num,date from GREEN_ATTENDANCE
	where DATE in ('2019-02','2019-03','2019-04','2019-05','2019-06')
	group by date
) B
on A.date=B.date
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

这样写会有点繁琐了,如有更好的办法请指教

上次更新: 2024-01-03, 13:22:13
最近更新
01
2023年度总结
01-03
02
MongoDB的简单的常用语法
12-11
03
cetnos7通过nfs共享磁盘文件
11-24
更多文章>