阅读 86

SQL 聚合、分组和排序

这篇文章主要介绍了SQL 聚合、分组和排序,文章围绕SQL 聚合、分组、排序的相关资料展开具体内容,需要的朋友可以参考一下

目录
  • 一、聚合查询

    • 1、COUNT 函数

    • 2、SUM 函数

    • 3、AVG 函数

    • 4、MAX 函数和 MIN 函数

  • 二、分组查询

    • 三、对聚合结果进行过滤

      • 1、HAVING 子句的构成要素

    • 四、对查询结果进行排序

      • 1、 指定多个排序键

      • 2、 使用聚合函数排序

    一、聚合查询

    在访问数据库时,经常要对表中的某列数据进行统计汇总,如求和、最大值、最小值、平均值等,这时就需要使用聚合函数,所谓聚合函数,就是用于汇总的函数,聚合就是将多行汇总为一行,

    常见的聚合函数如下:

    1、COUNT 函数

    count函数用于统计表中记录行数。

    例如,计算全部数据的行数:

    1
    SELECT COUNT(*) FROM users;

    注意: COUNT(*)会得到包含空值NULL的数据行数,若想排除包含NULL的数据行,可以使用count(字段名),会得到NULL之外的数据行数。

    1
    SELECT COUNT(user_name) FROM users;

    2、SUM 函数

    用于计算任意列中数据的和。

    例如,计算所有用户的年龄之和:

    1
    SELECT sum(age) FROM users;

    3、AVG 函数

    用于计算任意列中数据的平均值。

    例如,计算所有用户的年龄平均值:

    1
    SELECT AVG(age) FROM users;

    4、MAX 函数和 MIN 函数

    MAX函数用于计算任意列中数据的最大值,MIN函数用于计算任意列中数据的最小值。

    例如,计算所有用户中的年龄的最大值和最小值:

    1
    SELECT MAX(age),MIN(age) FROM users;

    注意: MAX函数和MIN函数几乎适用于所有数据类型的列,SUM函数和AVG函数只适用于数值类型的列。

    二、分组查询

    聚合函数是对表中所有数据进行统计汇总,还可以使用GROUP BY子句先把数据分成若干组,再进行统计汇总。

    语法格式:

    1
    SELECT <字段名>,... FROM <表名> GROUP BY <字段名>,...;

    例如,按照用户所在城市进行分组统计每个城市用户的和:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT city,count(*) FROM users GROUP BY city;
    +-------+----------+
    | city  | count(*) |
    +-------+----------+
    | 北京  |       60 |
    | 上海  |       45 |
    | NULL  |       80 |
    | 济南  |       12 |
    +-------+----------+

    通过结果可以看出,字段为NULL的也会被列为一个分组。如果想要排除在外,可以使用WHERE子句。

    1
    SELECT city,count(*) FROM users WHERE city IS NOT NULL GROUP BY city;

    三、对聚合结果进行过滤

    当我们使用GROUP BY子句分组的时候,有时候就需要对分组的聚合结果进行过滤,我们可能首先会想到使用WHERE子句,其实并不是,而是用HAVING子句,HAVING的作用和WHERE一样,都是起到过滤的作用,只不过WHERE是用于数据行的过滤,而HAVING则用于分组聚合结果的过滤。

    例如,按照用户的所在城市进行分组,并且筛选分组中用户数量大于40的组:

    1
    SELECT city,COUNT(*) AS num FROM users GROUP BY city HAVING num>40;

    再比如:按照用户的所在城市进行分组,并且筛选分组中用户平均年龄小于25的组。

    1
    SELECT city,AVG(age) AS avg_age FROM users GROUP BY city HAVING avg_age<25;

    1、HAVING 子句的构成要素

    HAVING子句中能够使用的3种要素:

    • 常数

    • 聚合函数

    • GROUP BY子句中指定的列名(即聚合键)

    四、对查询结果进行排序

    SQL查询中可以用到排序,对数据进行升序(ASC)或降序排列(DESC),默认是升序。

    语法格式:

    1
    SELECT <字段名>,... FROM <表名> ORDER BY <字段名> ASC/DESC,...;

    例如:对users表中的记录按照年龄升序排列:

    1
    SELECT * FROM users ORDER BY age ASC;

    注意: 升序ASC可以省去不写,但是降序DESC必须要写。

    例如,对users表中的记录按照年龄降序排列:

    1
    SELECT * FROM users ORDER BY age DESC;

    1、 指定多个排序键

    ORDER BY子句中可以指定多个排序键,例如,对users表中的记录按照年龄降序、注册时间升序排列:

    1
    SELECT * FROM student ORDER BY age DESC,register_time ASC;

    多个字段排序时中间用“,”隔开。

    2、 使用聚合函数排序

     ORDER BY子句中还可以使用聚合函数的结果进行排序。

    例如,按照用户的所在城市进行分组,并且按照分组的用户数量进行排序:

    1
    SELECT city,COUNT(*) AS num FROM users GROUP BY city ORDER BY num;

    到此这篇关于SQL 聚合、分组和排序的文章就介绍到这了

    原文链接:https://juejin.cn/post/7028381751374249991


    文章分类
    版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
    相关推荐