select count(case when 1=1 then 1 else 0 end) ; -- 1
select count(case when 1<>1 then 1 else null end) -- 0
select count(0) -- 1
select count(null) -- 0
select
type,
count(case when status = 3 then id else null end) as cnt
from (
select
1 as id ,
2 as status,
1 as type
union ALL
select
3 as id ,
4 as status,
1 as type
union ALL
select
2 as id ,
3 as status,
2 as type
union ALL
select
4 as id ,
3 as status,
2 as type
group by type
order by type ;
----------
select
type,
count(case when status = 3 then id else 0 end) as cnt
from (
select
1 as id ,
2 as status,
1 as type
union ALL
select
3 as id ,
4 as status,
1 as type
union ALL
select
2 as id ,
3 as status,
2 as type
union ALL
select
4 as id ,
3 as status,
2 as type
group by type
order by type ;
select count(*) from (select 1 as c1union allselect null as c1) -- 2 , count(*) 包含null值select count(c1) from (select 1 as c1union allselect null as c1) -- 1 , count(c1) 不包含null值select count(case when 1=1 then 1 else 0 end) ; -- 1se.
在hive中,我们经常会遇到对某列进行count、sum、avg等操作计算记录数、求和、求平均值等,但这列经常会出现有null值的情况,那这些操作会不会过滤掉null能呢?
下面我们简单测试下:
with tmp as
select null as col1
union all
select 666 as col1
union all
select 999 as col1
select avg(col1) avg_numm
, sum(col1) sum_num
, count(1) cnt.
sum(列1) : 这一列直接求和的时候遇到NULL值是会忽略不计的
avg(列1) : 直接求平均值的时候遇到NULL值也是忽略不计,其他有值的正常计算
列1+列2:如果两列里有其中一列为NULL的话,那么结果就是为null的
count(列1):如果列1里边有NULL的话是不进行计算的
count(*) :在进行统计计数的时候,所有的列都进行计算,包括NULL也算
1-函数对NULL值的求和求平均
首先来看这段代码
with temp as
(select null
在使用Hive以多个字段作为唯一性依据进行统计时,如果某个字段出现大量null值,会发生统计结果不准确问题,解决办法可以使用coalesce函数对空值进行替换。
假设原来是以及A,B两个字段去重后统计结果:
select count(distinct A,B) from tableName where xxx;
在实践中发现A,B都可能为空值,而且B值出现空值的概率非常大,在这种情况下,发现统计...
一、distinct,group by与ROW_Number()窗口函数使用方法
1. Distinct用法:对select 后面所有字段去重,并不能只对一列去重。
(1)当distinct应用到多个字段的时候,distinct必须放在开头,其应用的范围是其后面的所有字段,而不只是紧挨着它的一个字段,而且distinct只能放到所有字段的前面
(2)distinct对NULL是不进...
Hive中的count(1)和count(*)都是用来计算行数的函数,但是它们有一些区别。
count(1)是指计算所有行中第一个非空列的值,因此它的结果与count(*)相同,但是它比count(*)更快,因为它不需要检查每一列的值是否为空。
count(*)是指计算所有行的数量,包括空行。它需要检查每一列的值是否为空,因此比count(1)慢一些。
因此,如果你只是需要计算行数,而不需要考虑空行,那么使用count(1)会更快一些。但是如果你需要考虑空行,那么就需要使用count(*)。