精华内容
下载资源
问答
  • 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-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/left join用法示例

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

    SQL中GROUP BY用法示例

    原文链接:https://www.jianshu.com/p/9f0a49c04bce

    概述

    GROUP BY我们可以先从字面上来理解,GROUP表示分组,BY后面写字段名,就表示根据哪个字段进行分组,如果有用Excel比较多的话,GROUP BY比较类似Excel里面的透视表。
    GROUP BY必须得配合聚合函数来用,分组之后你可以计数(COUNT),求和(SUM),求平均数(AVG)等。
    聚合函数目前只能对数值型(int,float)进行计算,非数值型(字符串)可以自定义函数计算

    常用聚合函数

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

    语法

    SELECT column_name, aggregate_function(column_name)
    FROM table_name
    WHERE column_name operator value
    GROUP BY column_name;
    

    例子

    下图是员工在职时间表 dept_emp共四个字段,分别是emp_no(员工编号),dept_no(部门编号),from_date(起始时间),to_date(结束时间),记录了员工在某一部门所处时间段,to_date等于9999-01-01的表示目前还在职。
    员工任职时间表
    如果想统计每个部门有多少名在职员工,步骤如下:
    1.筛选在职员工 where to_date=‘9999-01-01’;
    2.对部门进行分组group by dept_no
    3.对员工进行计数 count(emp_no)

    SELECT
      dept_no as 部门,
      count(emp_no) as 人数
    FROM
      dept_emp 
    WHERE
      to_date = '9999-01-01' 
    GROUP BY
      dept_no
    

    结果
    在这里插入图片描述

    进一步获取部门编号对应的部门名称

    另外一张表departments具有字段dept_name、dept_no

    SELECT
        ( SELECT d.dept_name FROM departments d WHERE de.dept_no = d.dept_no ) AS 部门,
        count( de.emp_no ) AS 人数 
    FROM
        dept_emp de 
    WHERE
        de.to_date = '9999-01-01' 
    GROUP BY
        de.dept_no
    

    结果
    在这里插入图片描述

    HAVING

    where是聚合前的筛选,having是聚合后对筛选
    举个例子:
    每个部门人数都有了,那如果我们想要进一步知道员工人数大于30000的部门是哪些,这个时候就得用到HAVING了。
    语句如下:

    SELECT
        ( SELECT d.dept_name FROM departments d WHERE de.dept_no = d.dept_no ) AS 部门,
        count( de.emp_no ) AS 人数 
    FROM
        dept_emp de 
    WHERE
        de.to_date = '9999-01-01' 
    GROUP BY
        de.dept_no
    HAVING
        count( de.emp_no ) > 30000 
    

    结果
    在这里插入图片描述

    联合

    现在有一张表titles,共有4个字段,分别是emp_no(员工编号),title(职位),from_date(起始时间),to_date(结束时间),记录的是员工在某个时间段内职位名称,因为会存在升职,转岗之类的,里面emp_no可能会对应多个职位,我们现在要取到所有员工最近的职位信息,包括离职员工。

    本文介绍两种方法去实现结果:

    方法一

    嵌套一个group by、聚合函数max()子查询获取最近的职位信息。

    思路
    1.通过对emp_no分组取每个emp_no对应的最大的from_date;

    SELECT
        emp_no,
        max( from_date ) AS max_date 
    FROM
        titles 
    GROUP BY
        emp_no
    

    在这里插入图片描述
    2.通过查询出来的最大的from_date取筛选最近的的一条职位信息。

    SELECT
        t.emp_no,
        t.title 
    FROM
        titles t
        LEFT JOIN ( SELECT emp_no, max( from_date ) AS max_date FROM titles GROUP BY emp_no ) et 
    ON t.emp_no = et.emp_no AND t.from_date = et.max_date
    

    嵌套语句编写时先测试最里层的结果

    展开全文
  • 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的group by和order by的区别

    order by 用于排序,一般与asc升序或desc降序一起使用(默认升序).

    例:select * from table order by column desc;(表示根据column降序查询)

    group by 用于分类汇总,一般与聚合函数(比如avg平均、sum合计、max最大、min最小、count计算行)一起使用。

    还可以有去重的作用。
     

    例:select month,sum(salary)as total_salary from salarytable group by month;

    此语句用于统计每个月的日总工资

    在使用group by的语句中,只能select用于分类的列(表达式)或聚合函数。

     

    最后在讲讲可能会在面试中碰到的sql问题:where 、group by和having的执行先后顺序是?

    首先给大家说下这三个值的意思:

    where:数据库中常用的是where关键字,相信这个关键字你无时无刻不在用它吧,用于在初始表中筛选查询。它是一个约束声明,用于约束数据,在返回结果集之前起作用。

    group by:对select查询出来的结果集按照某个字段或者表达式进行分组,获得一组组的集合,然后从每组中取出一个指定字段或者表达式的值。
    在说group by的时候,我们还需要了解聚合函数,聚合函数是SQL语言中一种特殊的函数,例如我之前有给你们描述了一些聚合函数比如avg平均、sum合计、max最大、min最小、count计算行

    having:用于对where和group by查询出来的分组经行过滤,查出满足条件的分组结果。它是一个过滤声明,是在查询返回结果集以后对查询结果进行的过滤操作。

    当然我们在使用having时,需要注意以下几点:

    1. having只能用于group by(分组统计语句中)
    2. where 是用于在初始表中筛选查询,having用于在where和group by 结果分组中查询
    3. having 子句中的每一个元素也必须出现在select列表中
    4. having语句可以使用聚合函数,而where不使用。

    现在再回到刚刚那个常见的面试题:当一个语句中同时含有where、group by 、having及聚集函数时,执行顺序如下:

    1. 执行where子句查找符合条件的数据;
    2. 使用group by 子句对数据进行分组;对group by 子句形成的组运行聚集函数计算每一组的值;
    3. 最后用having 子句去掉不符合条件的组。

    PS:where条件用于group by之前,having条件则是用于group by 之后对结果进行筛选(记住这样一句话 相信你就不会忘了它们的执行先后顺序了)。

     

    展开全文
  • 问题:按授课班号统计选修该课程的人数,并按照人数升序排列。 --cno是课程号,sno是学号,sc是选修课程表...当select语句出现了不在group by语句的字段就会报错,错误信息也表示是这个错误。 个人理解,原因如下.
  • Sql server Group by 统计数量 order by时间

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

    千次阅读 2019-05-05 23:27:05
    GROUP BY我们可以先从字面上来理解,GROUP表示分组,BY后面写字段名,就表示根据哪个字段进行分组,就好像Excel分类统计一样(就是下拉箭头那个) 示例: 现在我们有一张员工信息表,包括英文名、部门: 现在我们...
  • sql语句 group by 和 having 的使用

    千次阅读 2020-07-30 16:08:02
    group by name :意为对name进行分组(name表示属性) group by name having 条件A :意为对name分组后,再根据条件A进行删选 例子: 表table name course score A 数学 80 A 科学 90 A 语文 70 B 数学 82 B 科学 81...
  • 深入理解sql分组查询(group by

    万次阅读 多人点赞 2018-05-28 11:24:00
    理解group by语义个人认为sql中group by和join是两大难点,因为它们转换了原来的表结构,group把表按某些字段统计缩小,join则使用笛卡尔积将多个表连接展开。咱们回到group by,顾名思义group即为分组,即将原来...
  • sql: group by 和 limit的使用

    千次阅读 2015-11-09 11:52:07
    sql group by limit
  • SQL中何时使用GROUP BY

    千次阅读 2013-03-17 17:01:25
    GROUP BY cno  当SELECT后既有表结构本身的字段,又有需要使用聚集函数(如AVG\SUM\MAX等)的字段时,就需要使用GROUP BY进行分组。  注意的是,分组的依照字段(BY后)必须是未被计算过的原始字段。  再者,...
  • SQL Server Group By 区分大小写

    千次阅读 2013-05-22 16:53:39
    今天写一个查询语句,需要用到group by word,word字段可能有大写 和 小写,怎样是大小写区分呢 SELECT count(id) as num,word collate Chinese_PRC_CS_AS_WS  FROM testtable  group by word collate ...
  • 当我们用聚合函数的时候,一般都要用到GROUP BY 先进行分组,然后再进行聚合函数的运算。运算完后就要用到HAVING 的用法了,就是进行判断了,例如说判断聚合函数的值是否大于某一个值等等。 select customer_name...
  • 标准 SQL 规定,对表进行聚合查询的时候,只能 SELECT 子句写下面 3 种内容:通过 GROUP BY 子句指定的聚合键、聚合函数(SUM 、AVG 等)、常量。我们来看个例子: 我们有 学生班级表(tbl_student_class) ...
  • Group By分组 depart表 现在想要查询出汽车系 和软件系的个数,这就用到分组 SELECT xname,COUNT(*) FROM depart GROUP BY xname 1.count()是聚合函数,对于返回的结果集,一行行地判断,累计值加1,最后返回累计值...
  • sql GROUP BY子句使用实例

    千次阅读 2015-01-02 16:51:10
    GROUP BY子句 GROUP BY子句可以将表的行划分为不同的组。分别总结每个组,这样就可以控制想要看见的详细信息的级别。 语法: [ GROUP BY [ ALL ] group_by_expression[ ,...n ] [ WITH { CUBE | ROLLUP } ] ] ...
  • SQL实现group by 分组后组内排序

    千次阅读 2020-09-12 22:44:22
    实现 查询每门成绩最好的前两名 select * from (select * ,row_number() over (partition by ...row_number() OVER (PARTITION BY COL1 ORDER BY COL2) 表示根据COL1分组,分组内部根据 COL2排序,而此函数计算的.
  • sql中where,group by,having的用法总结

    千次阅读 2019-08-22 14:45:43
    如果要用到group by 一般用到的就是“每这个字” 例如说明现在有一个这样的表:每个部门有多少人,就要用到分组的技术。 having是分组(group by)后的筛选条件,分组后的数据组内再筛选 where则是分组前筛选 当...
  • sql语句中group by与case when的结合使用

    千次阅读 2020-07-14 09:48:30
    有这么一个表Price,用来描述每天每种产品售出的金额,具体内容如表1.1所示,其中date字段代表日期,type字段表示产品类型,price字段表示产品售出金额。 date type price 2020-07-13 0 33.30 2020-07-13 ...
  • SQL语句中Group by语句的详细介绍

    千次阅读 2011-11-08 12:36:41
    Groupby按组汇总,所谓组就是完全一致的数据统称为一组,本例主要是按客户名称分组,一组一致的名称 进行sum求和。 2、查询Sales表,统计各部门的销售额,并按销售额降序排列结果 select department部门,sum...
  • SQL语句:Group By总结

    千次阅读 2017-03-14 10:10:29
    group by 用法解析 group by语法可以根据给定数据列的每个成员对查询结果进行分组统计,最终得到一个分组汇总表。 SELECT子句的列名必须为分组列或列函数。列函数对于GROUP BY子句定义的每个组各返回一个结果。 ...
  • 今天我的个人服务器上的Mysql写了这么一条SQL语句:select id,name,link,passwd,original,type from movie GROUP BY link;执行竟然报错,报错信息如下:[2018-07-06 14:53:27.339] [000172] [个人线上数据库] ...
  • sql语句select之分组查询(group by

    千次阅读 2021-04-21 09:12:07
    sql语句select之分组查询(group by) 分组查询 语法: select 分组函数,列(要求出现在group by的后面) from 表 where 筛选条件 group by 分组的列表 order by 子句 注意:查询列表比较特殊,要求是分组函数和...
  • sql group by的巧用

    千次阅读 2010-09-29 16:24:00
    数据库 sql 基本。
  • 关于sql语句group by 排序问题~

    千次阅读 2010-08-03 14:51:00
    类如 有一个 帖子的回复表,posts( id , tid , subject , message , dateline ...用UNIX 时间戳表示, <br />现在要求 选出 前十个来自不同主题的最新回复 <br /> SELECT * FROM posts GROUP B
  • SQL语句:Group By 语句小结

    千次阅读 2010-06-01 16:43:00
    Group By 语句简介: Group By语句从英文的字面意义上理解就是“根据(by)一定的规则进行分组(Group)”。它的作用是通过一定的规则将一个数据集划分成若干个小的区域,然后针对若干个小区域进行数据处理。...
  • [sql] view plain copy DROP TABLE IF EXISTS `TouTiaoAnchor`;  CREATE TABLE `TouTiaoAnchor` (   `HourId` int(10) unsigned NOT NULL,   `BetinTime` varchar(40) 
  • SQL语句:GroupBy总结

    千次阅读 2009-12-10 22:20:00
    在SQL Server 2000的联机帮助,对于Group By All是这样进行描述的: 假如使用 ALL 关键字,那么查询结果将包括由 GROUP BY 子句产生的所有组,即使某些组没有符合搜索条件的行。没有 ALL 关键字,包含 GROUP BY ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 135,583
精华内容 54,233
关键字:

在sql中groupby表示