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

前言

书接上回大数据分析入门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的函数手册
在这里插入图片描述

相关推荐

  1. 数据分析入门10分钟快速了解SQL

    2024-05-04 18:56:02       9 阅读
  2. 数据分析-GroupBy的排序和缺失值处理

    2024-05-04 18:56:02       18 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-05-04 18:56:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-04 18:56:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-04 18:56:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-04 18:56:02       20 阅读

热门阅读

  1. 深入学习Linux内核 - 进程地址空间

    2024-05-04 18:56:02       13 阅读
  2. C语言总结四:函数(压缩版)

    2024-05-04 18:56:02       12 阅读
  3. 简历总结:打造HR无法拒绝的简历

    2024-05-04 18:56:02       12 阅读
  4. 【需求工程概述】

    2024-05-04 18:56:02       11 阅读
  5. springcloud(智慧养老平台)

    2024-05-04 18:56:02       13 阅读
  6. codeforces round 879 div2 (a,b,c)

    2024-05-04 18:56:02       12 阅读
  7. 第Ⅰ章-V package.json文件详解

    2024-05-04 18:56:02       10 阅读
  8. 爬⾍监控与⾃动恢复机制

    2024-05-04 18:56:02       8 阅读
  9. Nodejs-异步并发控制

    2024-05-04 18:56:02       9 阅读