Oracle SQL 统计

Oracle中的 ‘空字符串’ 和 ‘NULL’ 的区别?

'' : ‘空字符串’

' ' :不是 ‘空字符串’ ,中间有空格;

‘空字符串’ 和 ‘NULL’ 不同。例如:where条件中 is null='' 结果不一样。

我们无法将 ‘空字符串’ 存进 Oracle 数据库。

感觉有 ‘NULL’ 了,’空字符串’ 有点多余。

参考:

https://blog.csdn.net/weiwenhp/article/details/7035327

根据条件进行count

方法一:count 与 decode 连用

1
2
3
4
5
6
7
8
9
10
select t.code,
t.name,
count(decode(nvl(t.status, 3), 1, 1, null)) status1,
count(decode(nvl(t.status, 3), 2, 2, null)) status2,
count(decode(nvl(t.status, 3), 3, 3, null)) status3,
count(decode(nvl(t.status, 3), 4, 4, null)) status4,
count(decode(nvl(t.status, 3), 5, 5, null)) status5,
count(*) total
from tableName t
group by t.code, t.name

方法二:count 与 case when 连用,与方法一相比,可以进行条件判断(>、<、=)

count():列值为空或null,不计数,显示为0。

1
2
3
4
5
6
7
8
9
10
select t.code,
t.name,
count(case when nvl(t.status, 3) = 1 then 1 else null end) status1,
count(case when nvl(t.status, 3) = 2 then 2 else null end) status2,
count(case when nvl(t.status, 3) = 3 then 3 else null end) status3,
count(case when nvl(t.status, 3) = 4 then 4 else null end) status4,
count(case when nvl(t.status, 3) = 5 then 5 else null end) status5,
count(*) total
from tableName t
group by t.code, t.name

1565870495067

方法三:sum 与 decode 连用

sum():列值为空或null,不计数,显示为空或null。

1
2
3
4
5
6
7
8
9
10
select t.code,
t.name,
sum(decode(nvl(t.status, 3), 1, 1, null)) status1,
sum(decode(nvl(t.status, 3), 2, 1, null)) status2,
sum(decode(nvl(t.status, 3), 3, 1, null)) status3,
sum(decode(nvl(t.status, 3), 4, 1, null)) status4,
sum(decode(nvl(t.status, 3), 5, 1, null)) status5,
count(*) total
from tableName t
group by t.code, t.name

1565870375581

方法四:sum 与 case when 连用

—参考方法二—。