hive中count和sum的区别

如题所述

首先,sum是对一个字段进行求和,hive中字段的类型一般是string或者int,如果是int当然没问题,如果是string类型但是全部是数字也没问题,如果包含一个字母sum出来将会是0.
假如有这样一张简单的表
user_id stringshop_id string
1234hello
12341234
那
么sum(user_id)的结果是2468,sum(shop_id)的结果是0.如果没有符合条件的记录,sum的返回值将是null,如
sum(case when user_id<1000 then shop_id
end)返回值将是null。但某些时候我没希望sum的结果如果没有符合条件的记录就返回0怎么办呢,可以用coalesce(shop_id,0)解
决这个问题。
count是对数据记录的条数进行统计,有一条符合的记录就是1,没有就是0.

前几天遇到这样一条sql语句,sum(case when
substr(gmt_receive_pay,0,13)='$cur_date $env.last_hour' then t2.total_fee end)
as hour_alipay_fee,
我知道这条语句当没有符合条件的记录时计算出来结果是null,但是我没有意识到这是一个bug,我们要的结果应该是0。检讨一下。
温馨提示:内容为网友见解,仅供参考
第1个回答  2016-07-22
首先,sum是对一个字段进行求和,hive中字段的类型一般是string或者int,如果是int当然没问题,如果是string类型但是全部是数字也没问题,如果包含一个字母sum出来将会是0.
假如有这样一张简单的表
user_id stringshop_id string
1234hello
12341234
那么sum(user_id)的结果是2468,sum(shop_id)的结果是0.如果没有符合条件的记录,sum的返回值将是null,如sum(case when user_id<1000 then shop_id end)返回值将是null。但某些时候我没希望sum的结果如果没有符合条件的记录就返回0怎么办呢,可以用coalesce(shop_id,0)解决这个问题。
count是对数据记录的条数进行统计,有一条符合的记录就是1,没有就是0.

前几天遇到这样一条sql语句,sum(case when substr(gmt_receive_pay,0,13)='$cur_date $env.last_hour' then t2.total_fee end) as hour_alipay_fee,
我知道这条语句当没有符合条件的记录时计算出来结果是null,但是我没有意识到这是一个bug,我们要的结果应该是0。检讨一下。
第2个回答  2019-10-26
对你的问题有些疑问,不知你是要了解两者在hive的执行层面的区别,还是纯粹HiveSQL 的两个函数的问题?
如果是前者,把问题描述更具体一些,现在还不知你是想了解什么问题~
如果是后者,关于两个函数的区别,count 是记数,sum是求和。
比如有以下记录:
学号 姓名 课程 分数
001 张三 语文 88
001 张三 数学 90

如果针对上面数据中的分数进行count和sum,count的结果为2,表示2条记录,如果sum,就是88+90=178

hive中count和sum的区别是什么?
首先,sum是对一个字段进行求和,hive中字段的类型一般是string或者int,如果是int当然没问题,如果是string类型但是全部是数字也没问题,如果包含一个字母sum出来将会是0.假如有这样一张简单的表 user_id stringshop_id string 1234hello 12341234 那 么sum(user_id)的结果是2468,sum(shop_id)的结果...

数据分析常用函数分享(一)
Count函数用于统计行数,对于电商数据分析计算客单价,只需将订单金额除以订单行数即可。Sum函数则用于求和,例如sum([字段A],[字段B])即可得到字段A和B的总和。在使用聚合函数时,有几个常见问题需要注意:在绘制图表时添加比值时,应使用sum(a)\/sum(b),而不是sum(a)\/b;求比值的和时,使用sum...

Hive 窗口函数
Hive 窗口函数是一种强大的数据分析工具,它能对数据进行复杂计算,区别于传统的聚合函数。窗口函数可以分为三类:聚合型、分析型和取值型。首先,让我们理解聚合型窗口函数,如SUM(), MIN(), MAX(), AVG(), COUNT()等。它们在窗口范围内实现灵活的聚合操作,如计算至今累计分数,通过rows between定...

Hive面试题
Hive的四种By的区别在于:Sort By实现分区内有序;Order By实现全局排序,仅有一个Reducer;Distribute By类似MapReduce中的Partition,用于分区,并结合Sort By使用;Cluster By在Distribute by和Sort by字段相同时使用,除了具有Distribute by的功能外还兼具Sort by的功能,但排序仅限于升序。Hive优化策略包...

数据分析师之——Hive SQL面试的n个问题之:行列转换、row_number、数据...
aggr`和`hive.groupby.skewindata`参数。2. 控制Map任务数量,如避免count(*)、sum(case ...)导致的Map任务过大。3. 使用sum代替count(distinct)来减少数据倾斜。4. 在join操作时,处理空值,如先join后union all处理空值和非空值。理解并掌握这些操作是数据分析师在Hive SQL面试中的重要准备。

Hive sql - 常用窗口函数(万字超详解)
在日常使用中,窗口函数通常与分析函数或专用窗口函数结合使用,形成如窗口聚合函数、窗口排序函数等实用函数。具体使用语法如下:1.1 什么是分析函数和专用窗口函数?常用的分析函数包括:sum()、max()、min()、avg()、count()等。专用窗口函数有:row_number()、rank()、dense_rank()等。1.2 什么...

hive的窗口函数?
具体场景包括:使用sum求解总访问量及用户明细;使用count查询用户总量及明细;使用max查询用户最大访问量及明细;使用min和avg查询用户平均访问量。此外,还可以按指定列进行分组的聚合计算,如求解不同年龄段总访问量总和、不同客户端总用户数、不同年龄段最大访问量。还可以进行指定列分组和排序的聚合...

Hive窗口函数
在Hive环境中,窗口函数分为排序函数(如row_number(), rank())和聚合函数(如sum(), min(), count(), avg()),前者在窗口内排序,后者则在排序基础上进行窗口内聚合。例如,row_number()会为每个窗口内的记录分配一个序号,序号相同的部分进行求和,不同序号的元素则累加。窗口大小可以通过rows...

Hive QL窗口函数总结(2)
从不同角度分析数据。其中,`GROUPING SETS`能够根据特定的维度组合进行聚合,`CUBE`则根据所有可能的维度组合进行聚合,`ROLLUP`则以最左侧的维度为主进行层级聚合。总结,Hive QL窗口函数提供了强大的数据分析能力,能够帮助我们对数据进行更精细的分析和操作,实现复杂的数据挖掘任务。

我与Hive的不解之谜系列(五):Hive常用函数及面试题实践解析
左连接与左半连接的区别在于左半连接返回左表所有记录,即使右表中没有匹配记录,而左连接则只返回左表与右表匹配的记录。Hive调优策略包括避免使用select *,使用count(1)或count(列名),使用分区表和分桶表,开启map端聚合,避免笛卡尔积,测试数据在本地运行,适当调整maptask和reduce个数,对于小表...

相似回答