zoukankan      html  css  js  c++  java
  • 八、分组

    分组跟聚合函数

    常用聚合函数

    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课程 第三章

    今天的学习是为了以后的工作更加的轻松!
  • 相关阅读:
    codeforces C. Cows and Sequence 解题报告
    codeforces A. Point on Spiral 解题报告
    codeforces C. New Year Ratings Change 解题报告
    codeforces A. Fox and Box Accumulation 解题报告
    codeforces B. Multitasking 解题报告
    git命令使用
    shell简单使用
    知识束缚
    php 调用系统命令
    数据传输方式(前端与后台 ,后台与后台)
  • 原文地址:https://www.cnblogs.com/tz90/p/14369949.html
Copyright © 2011-2022 走看看