Spark分组函数与NULL值处理
本章节深入探讨Spark SQL中分组函数的行为以及如何处理NULL值。
5.1 COUNT函数
在Spark SQL中,COUNT(*)
函数统计表中的总行数,包括NULL值。即使表为空,COUNT(*)
也会返回0,而不是NULL。
5.2 聚合函数:AVG,MAX,MIN,SUM
Spark SQL 提供了多种聚合函数,例如 AVG
,MAX
,MIN
和 SUM
。需要注意的是,这些函数默认情况下会忽略NULL值。
5.3 分组函数与NULL值
分组函数在计算时默认会忽略NULL值。例如,AVG(comm)
会计算 comm
列的平均值,但会忽略 comm
列中的所有NULL值。
使用NVL函数处理NULL值
可以使用 NVL()
函数将NULL值替换为指定值,以便在分组函数中进行处理。例如,AVG(NVL(comm, 0))
会将 comm
列中的所有NULL值替换为0,然后计算平均值。
5.4 GROUP BY子句
GROUP BY
子句用于对查询结果进行分组。
- 出现在
SELECT
列表、ORDER BY
子句或聚合函数中的字段必须包含在GROUP BY
子句中。 GROUP BY
子句中的字段不需要出现在SELECT
列表中。- 可以使用
WHERE
子句过滤数据,但不能使用聚合函数。 - 可以使用
ORDER BY
子句对分组结果进行排序。 - 如果没有
GROUP BY
子句,则SELECT
列表中不能同时出现单行函数和聚合函数。
示例:
-- 合法
SELECT empno, sal FROM emp;
SELECT AVG(sal) FROM emp;
-- 非法:SELECT列表中不能同时出现单行函数和聚合函数
SELECT empno, INITCAP(ename), AVG(sal) FROM emp;
-- 非法:WHERE子句中不能使用聚合函数
SELECT deptno, AVG(sal) FROM emp WHERE AVG(sal) > 2000 GROUP BY deptno;
5.5 HAVING子句
HAVING
子句用于对分组结果进行过滤,可以使用聚合函数。
示例:
SELECT deptno, job, AVG(sal) FROM emp GROUP BY deptno, job HAVING AVG(sal) > 2000;
暂无评论