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的话,那么结果就是为nullcount(列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(*)。