IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> SQL中GROUP BY语句介绍 -> 正文阅读

[大数据]SQL中GROUP BY语句介绍

本文主要介绍 SQL(Structured Query Language)中 GROUP BY 语句的相关知识,同时通过用法示例介绍 GROUP BY 语句的常见用法。

1 概述

GROUP BY 语句通常用于配合聚合函数(如 COUNT()、MAX() 等),根据一个或多个列对结果集进行分组。

从字面上来理解,GROUP 表示分组、BY 后接字段名,表示根据某个字段进行分组。

一般情况下,GROUP BY 必须要配合聚合函数一起使用,通过使用聚合函数,在分组之后可以对组内结果进行计数(COUNT)、求和(SUM),求平均数(AVG)操作等。

常用聚合函数如下:

  • count():计数
  • sum():求和
  • avg():求平均数
  • max():求最大值
  • min():求最小值

2 常见用法

现有一数据库表,内容如下:


   
  1. mysql > select * from roles;
  2. + ---------+------------+----------+---------------------+
  3. | role_id | occupation | camp | register_time |
  4. + ---------+------------+----------+---------------------+
  5. | 1 | mage | alliance | 2018 -12 -03 16: 11: 28 |
  6. | 2 | paladin | alliance | 2018 -11 -30 16: 11: 28 |
  7. | 3 | rogue | horde | 2018 -12 -01 16: 11: 28 |
  8. | 4 | priest | alliance | 2018 -12 -02 16: 11: 28 |
  9. | 5 | shaman | horde | NULL |
  10. | 6 | warrior | alliance | NULL |
  11. | 7 | warlock | horde | 2018 -12 -04 16: 11: 28 |
  12. | 8 | hunter | horde | NULL |
  13. + ---------+------------+----------+---------------------+
  14. 8 rows in set ( 0.00 sec)
  15. mysql >

接下来针对上表提供一些 GROUP BY 的用法示例,来介绍 GROUP BY 语句的常见用法。

2.1 结合聚合函数

首先,不使用聚合函数,只使用 GROUP BY,查询结果如下:


   
  1. mysql > select camp,role_id,occupation,register_time from roles group by camp;
  2. + ----------+---------+------------+---------------------+
  3. | camp | role_id | occupation | register_time |
  4. + ----------+---------+------------+---------------------+
  5. | alliance | 1 | mage | 2018 -12 -03 16: 11: 28 |
  6. | horde | 3 | rogue | 2018 -12 -01 16: 11: 28 |
  7. + ----------+---------+------------+---------------------+
  8. 2 rows in set ( 0.00 sec)
  9. mysql >

上述查询结果表明,当不使用聚合函数时,GROUP BY 的结果是分组内容中的第一组查询结果。

当然,在实际使用中,通常都需要将 GROUP BY 与聚合函数结合起来使用,来实现某种目的。

例如,我们想查找“联盟和部落阵营中所有角色最早的注册时间”,则可以通过如下语句实现:


   
  1. mysql > select camp, MIN(register_time) as register_time from roles group by camp;
  2. + ----------+---------------------+
  3. | camp | register_time |
  4. + ----------+---------------------+
  5. | alliance | 2018 -11 -30 16: 11: 28 |
  6. | horde | 2018 -12 -01 16: 11: 28 |
  7. + ----------+---------------------+
  8. 2 rows in set ( 0.01 sec)
  9. mysql >

上述查询结果表明,通过使用聚合函数“MIN()”,我们找到了每个阵营中最早的注册时间。

2.2 HAVING子句

HAVING 子句可以筛选通过 GROUP BY 分组后的各组数据。

承接上文内容,通过 HAVING 子句筛选出所有阵营中最早的注册时间,语句如下:


   
  1. mysql > select camp, MIN(register_time) as register_time from roles group by camp HAVING register_time > '2018-12-01 00:00:00';
  2. + -------+---------------------+
  3. | camp | register_time |
  4. + -------+---------------------+
  5. | horde | 2018 -12 -01 16: 11: 28 |
  6. + -------+---------------------+
  7. 1 row in set ( 0.00 sec)
  8. mysql >

注意:上述语句中 HAVING 的对象 register_time,实际上是前面聚合函数 MIN(register_time) 的结果集。而由于?WHERE 子句不能包含聚合函数,所以此处只能使用 HAVING 子句。如果使用 WHERE 子句替换 HAVING 子句,命令会报错,信息如下:


   
  1. mysql > select camp, MIN(register_time) as register_time from roles group by camp WHERE register_time > '2018-12-01 00:00:00';
  2. ERROR 1064 ( 42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE register_time > ' 2018 -12 -01 00: 00: 00 '' at line 1
  3. mysql >

【HAVING 与 WHERE 的区别】:

  • WHERE?子句的作用:在对查询结果进行分组前,把不符合 WHERE 条件的行去掉,即在分组之前过滤数据。另外,WHERE 条件中不能包含聚组函数。
  • HAVING 子句的作用:筛选满足条件的组,即在分组后过滤数据,条件中经常包含聚组函数,使用 HAVING 条件过滤出特定的组。

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-09-30 00:59:31  更:2022-09-30 00:59:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年5日历 -2025/5/1 5:51:11-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码