SQL 聚合、分组和排序

目录
  • 一、聚合查询
    • 1、count 函数
    • 2、sum 函数
    • 3、avg 函数
    • 4、max 函数和 min 函数
  • 二、分组查询
    • 三、对聚合结果进行过滤
      • 1、having 子句的构成要素
    • 四、对查询结果进行排序
      • 1、 指定多个排序键
      • 2、 使用聚合函数排序

    一、聚合查询

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

    常见的聚合函数如下:

    1、count 函数

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

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

    select count(*) from users;
    
    

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

    select count(user_name) from users;
    
    

    2、sum 函数

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

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

    select sum(age) from users;
    
    

    3、avg 函数

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

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

    select avg(age) from users;
    
    

    4、max 函数和 min 函数

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

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

    select max(age),min(age) from users;
    
    

    注意: max函数和min函数几乎适用于所有数据类型的列,sum函数和avg函数只适用于数值类型的列。

    二、分组查询

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

    语法格式:

    select <字段名>,... from <表名> group by <字段名>,...;
    
    

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

    select city,count(*) from users group by city;
    +-------+----------+
    | city  | count(*) |
    +-------+----------+
    | 北京  |       60 |
    | 上海  |       45 |
    | null  |       80 |
    | 济南  |       12 |
    +-------+----------+
    
    

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

    select city,count(*) from users where city is not null group by city;
    
    

    三、对聚合结果进行过滤

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

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

    select city,count(*) as num from users group by city having num>40;
    
    

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

    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),默认是升序。

    语法格式:

    select <字段名>,... from <表名> order by <字段名> asc/desc,...;
    
    

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

    select * from users order by age asc;
    
    

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

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

    select * from users order by age desc;
    
    

    1、 指定多个排序键

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

    select * from student order by age desc,register_time asc;
    
    

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

    2、 使用聚合函数排序

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

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

    select city,count(*) as num from users group by city order by num;
    

    到此这篇关于sql 聚合、分组和排序的文章就介绍到这了,更多相关sql 聚合、分组和排序内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!

    (0)
    上一篇 2022年3月21日
    下一篇 2022年3月21日

    相关推荐