• group by 多字段分组


    在平时的开发任务中我们经常会用到MYSQL的GROUP BY分组, 用来获取数据表中以分组字段为依据的统计数据。比如有一个学生选课表,表结构如下:

    Table: Subject_Selection
    
    Subject   Semester   Attendee
    ---------------------------------
    ITB001    1          John
    ITB001    1          Bob
    ITB001    1          Mickey
    ITB001    2          Jenny
    ITB001    2          James
    MKB114    1          John
    MKB114    1          Erica

    我们想统计每门课程有多少个学生报名,应用如下SQL:

    SELECT Subject, Count(*)
    FROM Subject_Selection
    GROUP BY Subject

    得到如下结果:

    Subject    Count
    ------------------------------
    ITB001     5
    MKB114     2

    因为表里记录了有5个学生选择ITB001,2个学生选择了MKB114。

    产生这个结果的原因是:
    GROUP BY X意思是将所有具有相同X字段值的记录放到一个分组里。
    那么GROUP BY X, Y呢?
    GROUP BY X, Y意思是将所有具有相同X字段值和Y字段值的记录放到一个分组里。

    我们下面再接着要求统计出每门学科每个学期有多少人选择,应用如下SQL:

    SELECT Subject, Semester, Count(*)
    FROM Subject_Selection
    GROUP BY Subject, Semester

    上面SQL的意思是,对Subject_Selection表中的数据进行分组,将具有相同Subject和Semester字段值的记录放到同一个分组里去, 然后对每个分组中的数据应用聚合函数(COUNT,SUM, AVG,etc)。

    得到的结果是:

    Subject    Semester   Count
    ------------------------------
    ITB001     1          3
    ITB001     2          2
    MKB114     1          2

    从表中的记录我们可以看出这个分组结果是正确的有3个学生在第一学期选择了ITB001, 2个学生在第二学期选择了ITB001,
    还有两个学生在第一学期选择了MKB114, 没人在第二学期选择MKB114。

    再比如有一个订单表,表中记录了所有支付过的订单

    Table: Orders
    
    Product   Buyer       Spending
    ---------------------------------
    PD001     Todd          12.00
    PD001     Todd          12.00
    PD001     Todd          12.00
    PD001     Lily          12.00
    PD001     Lily          12.00
    PD002     Todd          20.00
    PD002     Todd          20.00

    现在我们想统计每个用户在每种商品上总共花了多少钱,执行如下SQL

    SELECT Product,Buyer, SUM(Spending)
    FROM Orders
    GROUP BY Product, Buyer

    获得的结果如下:

    Product    Buyer     SUM
    ------------------------------
    PD001      Todd      36.00
    PD001      Lily      24.00
    PD002      Todd      40.00

    总结:

    在MYSQL中使用GROUP BY对表中的数据进行分组时,
    GROUP BY X意思是将所有具有相同X字段值的记录放到一个分组里,
    GROUP BY X, Y意思是将所有具有相同X字段值和Y字段值的记录放到一个分组里。

  • 相关阅读:
    JS内容左右滑动
    JS返回上一页
    两栏 三栏的css
    舅舅去世
    .net学习开始
    以论坛管理的方式来处理公司资讯
    《尽管去做》摘
    网页视频播放器代码集
    火影忍者和海贼王
    古代风水文献
  • 原文地址:https://www.cnblogs.com/zhengwei-cq/p/7372920.html
Copyright © 2020-2023  润新知