• 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 常见用法

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

    ![在这里插入图片描述](https://img-blog.csdnimg.cn/ba1393eb9e61421da012706ada162ded.png)

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

    2.1 结合聚合函数

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

    在这里插入图片描述

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

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

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

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

    2.2 HAVING子句

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

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

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

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

    mysql> select camp,MIN(register_time) as register_time from roles group by camp WHERE register_time > '2018-12-01 00:00:00';
    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
    

    【HAVING 与 WHERE 的区别】:

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

  • 相关阅读:
    JAVA:List 与 数组 相互转换
    分布式数字身份:通往Web3.0世界的个人钥匙
    看我如何连夜自建网站背刺我的求职对手们
    删除元素(带过渡动画)
    K3s离线部署
    03 树莓派QEMU模拟器介绍
    Spring MVC中@RequestParam注解的功能是什么呢?
    2022-04-03 排查问题要知识沉淀
    研究 | CT图像迭代重建算法研究进展
    天软特色因子看板 (2023.08 第08期)
  • 原文地址:https://blog.csdn.net/qq_15719613/article/details/127095195