大数据分析入门之10分钟掌握GROUP BY语法

发布于:2024-05-04 ⋅ 阅读:(95) ⋅ 点赞:(0)

前言

书接上回大数据分析入门10分钟快速了解SQL
本篇将会进一步介绍group by语法。

基本语法

SELECT column_name, aggregate_function(column_name)
FROM table_name
GROUP BY column_name
HAVING condition

假设我们有students表,其中有id,grade_number,class_number,name4个字段

  • 如果需要统计每个年级(grade)有多少人,那么SQL是
SELECT grade_number, count(id) as cnt
FROM students
GROUP BY grade_number
  • 如果需要统计每个年级(grade)的每个班级(class)有多少人,那么SQL是
SELECT grade_number, class_number, count(id) as cnt
FROM students
GROUP BY grade_number,class_number -- GROUP BY 支持多列
  • 如果你想知道哪些班级超过了50人,那就需要用到HAVING
SELECT grade_number, class_number, count(id) as cnt
FROM students
GROUP BY grade_number,class_number
HAVING count(id) > 50 -- 对聚合结果进行过滤

进阶用法

刚刚只展示了1个count函数,实际可用的聚合函数有很多。

以SparkSQL为例

  • 常见的数学函数
函数名 作用
max 最大值
min 最小值
count 计数
sum 求和

“数学函数”比较简单,就不用举例子了

  • 常见的集合函数
函数名 作用
collect_list 将所有结果聚合到一个list(一种不去重的数据类型)
collect_set 将所有结果聚合到一个set(一种去重的数据类型)

举个例子,想知道每个班级有哪些人

SELECT grade_number, class_number, collect_list(id) as cnt
FROM students
GROUP BY grade_number,class_number -- GROUP BY 支持多列

结果将会是

1年级,1班, [‘张三’,'李四']
...
1年级, 8班, ['秦朗']
...
  • 抽样函数

聚合函数能搭配distinct来使用,例如count(distinct name)统计name去重后的结果。

不过大数据场景一般少用count (distinct name), 会用approx_count_distinct(name)来替代.

因为大数据的计算比较慢,抽样可以更快地得到一个近似值。

总结

聚合语法主要在于了解各种聚合函数,每个引擎都有自己的函数手册可以查阅,下面就是SparkSQL的函数手册
在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到