首页 > 数据库 >SQL中GROUP BY语句介绍

SQL中GROUP BY语句介绍

时间:2022-10-02 10:04:00浏览次数:46  
标签:语句 聚合 函数 register 分组 time SQL GROUP


本文主要介绍 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 常见用法

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

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

2.1 结合聚合函数

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

SQL中GROUP BY语句介绍_数据库

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

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

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

SQL中GROUP BY语句介绍_sql_02

上述查询结果表明,通过使用聚合函数“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 条件过滤出特定的组。



本文主要介绍 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 常见用法

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

标签:语句,聚合,函数,register,分组,time,SQL,GROUP
From: https://blog.51cto.com/u_14682436/5729208

相关文章

  • 使用 docker-compose 安装 es、kibana、mysql、redis、kafka
    由于经常的安装虚拟机,每次都要重装环境比较麻烦。这次写了一个docker-compose文件,一次性搞定安装问题。#Useroot/exampleasuser/passwordcredentialsversion:"3......
  • 单机部署MySQL
    一、单机部署MySQL单机部署后面不考虑组集群可以采用此方案,主从集群建议使用StatefulSet方式部署1.1、MySQL密码密码存储在secret,通过环境变量方式挂到容器中mys......
  • SQL Server大分区表没有空分区的情况下如何扩展分区的方法
    Alwayskeepemptypartitionsatbothendsofthepartitionrange.Keepthepartitionsatbothendstoguaranteethatthepartitionsplitandthepartitionmerge......
  • Sqlserver限制账户在哪些ip下才可以访问数据库
    Alwayskeepemptypartitionsatbothendsofthepartitionrange.Keepthepartitionsatbothendstoguaranteethatthepartitionsplitandthepartitionmerge......
  • SSRS页面配置Postgresql data source的方法
    Alwayskeepemptypartitionsatbothendsofthepartitionrange.Keepthepartitionsatbothendstoguaranteethatthepartitionsplitandthepartitionmerge......
  • dolphindb dba一些常用的维护sql
    Alwayskeepemptypartitionsatbothendsofthepartitionrange.Keepthepartitionsatbothendstoguaranteethatthepartitionsplitandthepartitionmerge......
  • MYSQL学习笔记之 表
    (一)语法格式createtable表名(字段名1数据类型,字段名2数据类型...);或createtable表名(字段名1 数据类型,字段名2 数据类型,字段名3 数据类型​);说明:① 表名:建议以t_......
  • sql执行分析
    pom.xml<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId></dependency>application.ymlmybatis-plus:global-co......
  • sql注入器
    ​​官方文档​​​​官方案例​​SQL自动注入器接口ISqlInjectorpublicinterfaceISqlInjector{/***<p>*检查SQL是否注入(已经注入过不再注入)*......
  • leetcode-sql-626. 换座位 order by if
    626.换座位表:Seat+-------------+---------+|ColumnName|Type  |+-------------+---------+|id     |int  ||name    |varchar|......