• 八、分组


    分组跟聚合函数

    常用聚合函数

    max()    #最大值
    min()    #最小值
    avg()    #平均值
    sum()    #总和
    count()  #个数
    concat() #拼接
    group_concat()  #列转行
    

    使用concat拼接

    mysql> select concat(user,"@",host) from mysql.user;
    +-------------------------+
    | concat(user,"@",host)   |
    +-------------------------+
    | tz@10.154.0.%           |
    | mysql.session@localhost |
    | mysql.sys@localhost     |
    | root@localhost          |
    +-------------------------+
    

    group by
    根据group by后面的条件进行分组统计,by后面可以跟一个列或多个列。
    参考资料: group by报错

    执行过程

    1. 对group by 后面的条件列进行整表排序。
    2. 去重之后假设有多行重复则只能显示第一行。
    3. 为避免只能显示第一行,需要使用聚合函数进行单列或者计算或者统计后再显示。

    视频位于6. 第三章 SQL基础应用-3 day04 上节回顾

    案例

    #统计各个国家的总人口数,以国家分组
    USE world
    SELECT countrycode ,SUM(population)    FROM  city  GROUP BY countrycode;
    
    #统计中国每个省的总人口数量,以省分组
    SELECT district,SUM(Population) FROM city  WHERE countrycode='chn' GROUP BY district;
    
    #统计各个国家的城市数量,以国家分组,使用count函数统计数量
    SELECT countrycode,COUNT(id)  FROM city GROUP BY countrycode;
    

    having
    后面可以过滤条件
    注意:having需要跟在group by后

    案例

    #统计中国每个省的总人口数,过滤出其中总人口数小于100的省份
    SELECT district,SUM(Population)
    FROM city
    WHERE countrycode='chn'
    GROUP BY district
    HAVING SUM(Population) < 1000000 ;
    

    limit
    只显示前多少行

    案例

    #查询中国所有城市,并按人口数进行排序(从大到小)
    SELECT * FROM city WHERE countrycode='CHN' ORDER BY population DESC;
    
    #统计中国各个省的总人口数并从大到小排序
    SELECT district AS 省 ,SUM(Population) AS allPopulation
    FROM city
    WHERE countrycode='chn'
    GROUP BY district
    ORDER BY allPopulation DESC ;
    
    #统计中国每个省的人口并找出人口大于500w的省,并按照总人口从大到小排序,只显示前三名
    SELECT  district, SUM(population)  FROM  city 
    WHERE countrycode='CHN'
    GROUP BY district 
    HAVING SUM(population)>5000000
    ORDER BY SUM(population) DESC
    LIMIT 3 ;
    
    #跳过N,显示一共M行
    LIMIT N ,M
    #跳过5行显示6行 
    LIMIT 5,6
    
    #显示前五行后的五行数据
    SELECT  district, SUM(population)  FROM  city 
    WHERE countrycode='CHN'
    GROUP BY district 
    HAVING SUM(population)>5000000
    ORDER BY SUM(population) DESC
    LIMIT 5,5;
    
    #distinct去重
    SELECT DISTINCT(countrycode) FROM city;
    

    union all

    #查询中国或美国城市的信息
    SELECT * FROM city WHERE countrycode IN ('CHN' ,'USA');
    
    #可以改写为
    SELECT * FROM city WHERE countrycode='CHN'
    UNION ALL
    SELECT * FROM city WHERE countrycode='USA'
    

    一般情况下,我们可以将 IN 或者 OR 语句 改写成 UNION ALL,以此来提高性能。
    UNION 去重复
    UNION ALL 不去重复

    学习来自:郭老师博客,老男孩深标DBA课程 第三章

    今天的学习是为了以后的工作更加的轻松!
  • 相关阅读:
    如何配置tomcat的环境变量
    如何配置jdk的本地环境
    如何下载最新版本和旧版本的eclipse?
    用eclipse开发需要准备什么?
    eclipse.ini相关问题
    jquery如何遍历table,并对table里的某一个单元格进行操作
    jquery的Layer弹出框操作
    select列表遍历和触发事件
    Spring AOP详细介绍
    简单介绍Spring的ContextLoaderListener
  • 原文地址:https://www.cnblogs.com/tz90/p/14369949.html
Copyright © 2020-2023  润新知