精华内容
下载资源
问答
  • SQL中GROUP BY语句介绍

    万次阅读 多人点赞 2018-12-27 10:21:16
    本文主要介绍 SQL(Structured Query Language) GROUP BY 语句的相关知识,同时通过用法示例介绍 GROUP BY 语句的常见用法。 1 概述 GROUP BY 语句通常用于配合聚合函数(如 COUNT()、MAX() 等),根据一个或多...

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

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

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

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

    2.1 结合聚合函数

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

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

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

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

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

    mysql> select camp,MIN(register_time) as register_time from roles group by camp;
    +----------+---------------------+
    | camp     | register_time       |
    +----------+---------------------+
    | alliance | 2018-11-30 16:11:28 |
    | horde    | 2018-12-01 16:11:28 |
    +----------+---------------------+
    2 rows in set (0.01 sec)
    
    mysql> 
    

    上述查询结果表明,通过使用聚合函数“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
    mysql> 
    

    【HAVING 与 WHERE 的区别】:

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

    展开全文
  • SQL中group by的使用

    千次阅读 2018-12-27 11:42:55
    SQL中Group By的使用 1、概述 “Group By”从字面意义上理解就是根据“By”指定的规则对数据进行分组,所谓的分组就是将一个“数据集”划分成若干个“小区域”,然后针对若干个“小区域”进行数据处理。   2、...

    SQL中Group By的使用

    1、概述

    “Group By”从字面意义上理解就是根据“By”指定的规则对数据进行分组,所谓的分组就是将一个“数据集”划分成若干个“小区域”,然后针对若干个“小区域”进行数据处理。

     

    2、原始表

     

    3、简单Group By

    示例1

    select 类别, sum(数量) as 数量之和
    from A
    group by 类别

    返回结果如下表,实际上就是分类汇总。

     

    4、Group By 和 Order By

    示例2

    select 类别, sum(数量) AS 数量之和
    from A
    group by 类别
    order by sum(数量) desc

    返回结果如下表

    在Access中不可以使用“order by 数量之和 desc”,但在SQL Server中则可以。

     

    5、Group By中Select指定的字段限制

    示例3

    select 类别, sum(数量) as 数量之和, 摘要
    from A
    group by 类别
    order by 类别 desc

    示例3执行后会提示下错误,如下图。这就是需要注意的一点,在select指定的字段要么就要包含在Group By语句的后面,作为分组的依据;要么就要被包含在聚合函数中。

     

    6、Group By All

    示例4

    select 类别, 摘要, sum(数量) as 数量之和
    from A
    group by all 类别, 摘要

    示例4中则可以指定“摘要”字段,其原因在于“多列分组”中包含了“摘要字段”,其执行结果如下表

    “多列分组”实际上就是就是按照多列(类别+摘要)合并后的值进行分组,示例4中可以看到“a, a2001, 13”为“a, a2001, 11”和“a, a2001, 2”两条记录的合并。

    SQL Server中虽然支持“group by all”,但Microsoft SQL Server 的未来版本中将删除 GROUP BY ALL,避免在新的开发工作中使用 GROUP BY ALL。Access中是不支持“Group By All”的,但Access中同样支持多列分组,上述SQL Server中的SQL在Access可以写成

    select 类别, 摘要, sum(数量) AS 数量之和
    from A
    group by 类别, 摘要

     

    7、Group By与聚合函数

    在示例3中提到group by语句中select指定的字段必须是“分组依据字段”,其他字段若想出现在select中则必须包含在聚合函数中,常见的聚合函数如下表:

    函数作用支持性
    sum(列名)求和    
    max(列名)最大值    
    min(列名)最小值    
    avg(列名)平均值    
    first(列名)第一条记录仅Access支持
    last(列名)最后一条记录仅Access支持
    count(列名)统计记录数注意和count(*)的区别

    示例5:求各组平均值

    select 类别, avg(数量) AS 平均值 from A group by 类别;

    示例6:求各组记录数目

    select 类别, count(*) AS 记录数 from A group by 类别;

    示例7:求各组记录数目

     

    8、Having与Where的区别

    • where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,where条件中不能包含聚组函数,使用where条件过滤出特定的行。
    • having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having 条件过滤出特定的组,也可以使用多个分组标准进行分组。

    示例8

    select 类别, sum(数量) as 数量之和 from A
    group by 类别
    having sum(数量) > 18

    示例9:Having和Where的联合使用方法

    select 类别, SUM(数量)from A
    where 数量 gt;8
    group by 类别
    having SUM(数量) gt; 10

     

    9、Compute 和 Compute By

    select * from A where 数量 > 8

    执行结果:

    示例10:Compute

    select *
    from A
    where 数量>8
    compute max(数量),min(数量),avg(数量)

    执行结果如下:

    compute子句能够观察“查询结果”的数据细节或统计各列数据(如例10中max、min和avg),返回结果由select列表和compute统计结果组成。

    示例11:Compute By

    select *
    from A
    where 数量>8
    order by 类别
    compute max(数量),min(数量),avg(数量) by 类别

    执行结果如下:

    示例11与示例10相比多了“order by 类别”和“... by 类别”,示例10的执行结果实际是按照分组(a、b、c)进行了显示,每组都是由改组数据列表和改组数统计结果组成,另外:

    • compute子句必须与order by子句用一起使用
    • compute...by与group by相比,group by 只能得到各组数据的统计结果,而不能看到各组数据

    在实际开发中compute与compute by的作用并不是很大,SQL Server支持compute和compute by,而Access并不支持

    展开全文
  • SQL中GROUP BY用法示例

    千次阅读 2018-11-15 16:36:03
    SQL中GROUP BY用法示例 概述 GROUP BY我们可以先从字面上来理解,GROUP表示分组,BY后面写字段名,就表示根据哪个字段进行分组,如果有用Excel比较多的话,GROUP BY比较类似Excel里面的透视表。 GROUP BY必须得...

    SQL中GROUP BY用法示例

    概述
    GROUP BY我们可以先从字面上来理解,GROUP表示分组,BY后面写字段名,就表示根据哪个字段进行分组,如果有用Excel比较多的话,GROUP BY比较类似Excel里面的透视表。
    GROUP BY必须得配合聚合函数来用,分组之后你可以计数(COUNT),求和(SUM),求平均数(AVG)等

    常用聚合函数
    count() 计数
    sum() 求和
    avg() 平均数
    max() 最大值
    min() 最小值

    举例一:查询某一天的各个平台的订单总数
    SELECT count(*) as 总数,platform FROM mk_order WHERE created_at between '2018-11-14 00:00:00’and ‘2018-11-14 23:59:59’ group by platform order by ‘count’ desc
    查询某一天的各个平台的订单总数

    举例二:查询examine_status=1(审核通过)的所有会员
    SELECT COUNT(*) as 会员总数 FROM mk_user WHERE deleted_at is null and examine_status=‘1’
    查询examine_status=1(审核通过)的所有会员

    展开全文
  • SQL中Group By的使用

    千次阅读 2016-09-20 10:52:33
    SQLGroup By的使用 ...1、概述2、原始表3、简单... By中Select指定的字段限制6、Group By All7、Group By与聚合函数8、Having与Where的区别9、Compute 和 Compute By 1、概述 “Group By”从字面

    SQL中Group By的使用

    1、概述

    “Group By”从字面意义上理解就是根据“By”指定的规则对数据进行分组,所谓的分组就是将一个“数据集”划分成若干个“小区域”,然后针对若干个“小区域”进行数据处理。

    2、原始表

    3、简单Group By

    示例1

    select 类别, sum(数量) as 数量之和
    from A
    group by 类别

    返回结果如下表,实际上就是分类汇总。

    4、Group By 和 Order By

    示例2

    select 类别, sum(数量) AS 数量之和
    from A
    group by 类别
    order by sum(数量) desc

    返回结果如下表

    在Access中不可以使用“order by 数量之和 desc”,但在SQL Server中则可以。

    5、Group By中Select指定的字段限制

    示例3

    select 类别, sum(数量) as 数量之和, 摘要
    from A
    group by 类别
    order by 类别 desc

    示例3执行后会提示下错误,如下图。这就是需要注意的一点,在select指定的字段要么就要包含在Group By语句的后面,作为分组的依据;要么就要被包含在聚合函数中

    6、Group By All

    示例4

    select 类别, 摘要, sum(数量) as 数量之和
    from A
    group by all 类别, 摘要

    示例4中则可以指定“摘要”字段,其原因在于“多列分组”中包含了“摘要字段”,其执行结果如下表

    “多列分组”实际上就是就是按照多列(类别+摘要)合并后的值进行分组,示例4中可以看到“a, a2001, 13”为“a, a2001, 11”和“a, a2001, 2”两条记录的合并。

    SQL Server中虽然支持“group by all”,但Microsoft SQL Server 的未来版本中将删除 GROUP BY ALL,避免在新的开发工作中使用 GROUP BY ALL。Access中是不支持“Group By All”的,但Access中同样支持多列分组,上述SQL Server中的SQL在Access可以写成

    select 类别, 摘要, sum(数量) AS 数量之和
    from A
    group by 类别, 摘要

    7、Group By与聚合函数

    在示例3中提到group by语句中select指定的字段必须是“分组依据字段”,其他字段若想出现在select中则必须包含在聚合函数中,常见的聚合函数如下表:

    函数 作用 支持性
    sum(列名) 求和  
    max(列名) 最大值  
    min(列名) 最小值  
    avg(列名) 平均值  
    first(列名) 第一条记录 仅Access支持
    last(列名) 最后一条记录 仅Access支持
    count(列名) 统计记录数 注意和count(*)的区别

    示例5:求各组平均值

    select 类别, avg(数量) AS 平均值 from A group by 类别;

    示例6:求各组记录数目

    select 类别, count(*) AS 记录数 from A group by 类别;

    示例7:求各组记录数目

    8、Having与Where的区别

    • where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,where条件中不能包含聚组函数,使用where条件过滤出特定的行。
    • having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having 条件过滤出特定的组,也可以使用多个分组标准进行分组。

    示例8

    select 类别, sum(数量) as 数量之和 from A
    group by 类别
    having sum(数量) > 18

    示例9:Having和Where的联合使用方法

    select 类别, SUM(数量)from A
    where 数量 gt;8
    group by 类别
    having SUM(数量) gt; 10

    9、Compute 和 Compute By

    select * from A where 数量 > 8

    执行结果:

    示例10:Compute

    select *
    from A
    where 数量>8
    compute max(数量),min(数量),avg(数量)

    执行结果如下:

    compute子句能够观察“查询结果”的数据细节或统计各列数据(如例10中max、min和avg),返回结果由select列表和compute统计结果组成。

    示例11:Compute By

    select *
    from A
    where 数量>8
    order by 类别
    compute max(数量),min(数量),avg(数量) by 类别

    执行结果如下:

    示例11与示例10相比多了“order by 类别”和“... by 类别”,示例10的执行结果实际是按照分组(a、b、c)进行了显示,每组都是由改组数据列表和改组数统计结果组成,另外:

    • compute子句必须与order by子句用一起使用
    • compute...by与group by相比,group by 只能得到各组数据的统计结果,而不能看到各组数据

    在实际开发中compute与compute by的作用并不是很大,SQL Server支持compute和compute by,而Access并不支持

    分类:  SQL语句Access
    标签:  AccessSQL ServerGroup by
    展开全文
  • SQL中Group by使用

    千次阅读 2017-09-05 20:13:19
    1、Group by使用select XS.学号,XS.姓名,XS.所在系,XX.课程号,KC.课程名 from XS join XX on XS.学号=XX.学号 join KC on KC.课程号=XX....group by XS....order by XX.... 1、在group By子句出现的字段,必须
  • sql中group by与having 的使用

    千次阅读 多人点赞 2019-08-21 11:07:26
    原文:sql语句中GROUP BY 和 HAVING的使用 count() 介绍GROUP BY 和 HAVING 子句前,我们必需先讲讲sql语言中一种特殊的函数:聚合函数, 例如SUM, COUNT, MAX, AVG等。这些函数和其它函数的根本区别就是它们一般...
  • SQL中groupby和distinct的区别

    千次阅读 2019-09-27 09:42:04
    select num from test_test group by num; 多列去重 select distinct id,num from test_test; select id,num from test_test group by id,num; 最后得到结果都是一样的,下面讨论一下效率的比较, 先了解一...
  • (转)SQL中group by详解

    万次阅读 多人点赞 2019-04-13 13:38:34
    关于group by的用法 原理 我和原博文作者一样,突然间不会用group by了(可能是一直都不会用),就找了一下详解,这篇文章讲的很形象,学习一波 看一下测试表test 对这个表写group by时,可能就会发生下面这样的...
  • sql中group by 应用子查询的情况

    千次阅读 2019-05-21 14:17:07
    group by只有需要进行统计的的时候非常有效。 这个值得探究的问题   后来看到可以根据 查询每个类别下id最大值来解决问题上面的sql 改下就可以了。 select count(*) from user_role where id in  ...
  • SQL中group by的用法解析

    千次阅读 2019-01-03 12:14:05
    由于自学很多东西掌握的不够,这个问题一次很重要的面试时候被问到了,是用于写SQL语句当中,犯了很低级的错误,最终没能如愿进入那家公司。 group by的作用是通过一定的规则将一个数据集划分成若干个小区域,然后...
  • SQL中GROUP BY/left join用法示例

    千次阅读 2019-11-06 15:58:20
    SQL中GROUP BY用法示例 概述 GROUP BY我们可以先从字面上来理解,GROUP表示分组,BY后面写字段名,就表示根据哪个字段进行分组,如果有用Excel比较多的话,GROUP BY比较类似Excel里面的透视表。 GROUP BY必须得配合...
  • sql中group by语句

    千次阅读 2016-11-19 23:51:07
     sql中的聚焦函数有: count():统计某一列中值的个数 sum():计算某一列的总和 avg():计算某一列的平均值 max():计算某一列的最大值 min():计算某一列的最小值  group by 通常与这几个函数一起使用  ...
  • 浅析SQL中Group By的使用

    千次阅读 多人点赞 2017-07-30 17:19:27
    Group By”从字面意义上理解就是根据“By”指定的规则对数据进行分组,所谓的分组就是将一个“数据集”划分成若干个“小区域”,然后针对若干个“小区域”进行数据处理。 2、原始表 3、简单Group By 示例1 ...
  • sql中group by后使用别名

    千次阅读 2020-03-12 17:18:03
    为什么mysql的group by之后不能使用别名呢,假如有这样一个数据表(t_bike_cnt),一列为日期,另一列为投放车辆数,我们想要统计每个月的投放车辆数,并且过滤出投放车辆大于10的月份和车辆数 日期(pt) 投放...
  • SQL中GROUP BY语句与HAVING语句的使用

    千次阅读 2019-07-08 23:58:15
    一、GROUP BY GROUP BY语句用来与聚合函数(aggregate functions such as COUNT, SUM, AVG, MIN, or MAX.)联合使用来得到一个或多个列的结果集。 语法如下: SELECT column1, column2, … column_n, aggregate_...
  • SQL中Group By

    千次阅读 2018-09-22 15:45:51
    Group By”从字面意义上理解就是根据“By”指定的规则对数据进行分组,所谓的分组就是将一个“数据集”划分成若干个“小区域”,然后针对若干个“小区域”进行数据处理。 原始表 简单Group By select 类别, ...
  • SqlServer中group by的使用

    千次阅读 2017-08-17 11:58:33
    SqlServer中group by的使用
  • Sql Server中Group By后字符串合并

    千次阅读 2019-07-22 22:49:13
    SQLSqlServer中Group By后,字符串合并 目录 1、传统方法:创建处理函数(sql server 2000只能用该方法) 2、新的解决方法:利用for xml path(sql server 2005及更高版本) 正文 参考: 1、SQL查询语....
  • SQL 查询group by详细解释

    千次阅读 2018-10-15 21:31:50
    group by:通过所查询的数据的某一字段或属性进行分组,...上述语句只能mysql跑通,其他数据库例如SQL server或Oracle中都不能运行,因为在SQL server或Oracle只能像如下写,group by以外的字段不能查询。 ...
  • SQL中 group by 1, order by 1 语句是什么意思? 1指的是select语句后面第一列(属性)
  • sqlgroup by和order by的区别

    千次阅读 2018-05-28 15:49:09
    今天我们来讲讲sqlgroup by和order by的区别 order by 用于排序,一般与asc升序或desc降序一起使用(默认升序). 例:select * from TABLE order by column desc;(表示降序查询) group by 用于分类汇总,一般与聚合...
  • Sql server Group by 统计数量 order by时间

    千次阅读 2016-07-14 18:09:23
    Sql server Group by 统计数量 order by时间
  • SQL语句 group by 和 having 的用法

    千次阅读 2018-08-22 12:52:14
    having是分组(group by)后的筛选条件,分组后的数据组内再筛选 where则是分组前筛选 简单来说,group by 相当于把整个表按照某个字段进行分开,分割成一个个的小表,再对这些小表按照前面拟定的规则进行查找。...
  • sql语句中GROUP BY 和 HAVING的用法

    万次阅读 多人点赞 2018-08-09 10:46:55
    having字句可以让我们筛选成组后的各种数据,where字句聚合前先筛选记录,也就是说作用在group by和having字句前。而 having子句聚合后对组记录进行筛选。 SQL实例: 一、显示每个地区的总人口数和总面积. ...
  • SQL Server中group by用法以及容易出错的点

    万次阅读 多人点赞 2018-06-04 16:49:10
    SQL Servergroup by 一般是和聚合函数一起搭配使用的,不然用了也没什么意义除了消除重复功能外。例如,有这样的一学生成绩表(学号,课程号,成绩)我们按学号分组查询,select SNo from sc group by SNo...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 438,774
精华内容 175,509
关键字:

在sql中groupby