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

Table: Subject_SelectionSubject   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: OrderProduct   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 `Order`
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字段值的记录放到一个分组里。

group by多字段分组相关推荐

  1. 玩转SQL语句之group by 多字段分组查询与having子句,一篇解决你的疑惑!

    sql语句group by使用详解 group by的基本语法 基本语法 什么是分组查询(一个字段) 多个字段的分组查询 1.两个字段的分组查询 2.三个字段及N个字段进行分组查询 having子句的 ...

  2. mysql grou平by_MySQL group by对单字分组序和多字段分组的方法讲解

    我这里创建了一个 goods 表,先看下里面的数据: mysql> select * from goods; +----+------+------+------------+--------- ...

  3. 将查询出来的数据按照一个字段分组且排序过程中,遇到的一些有关group的问题(分组排序应该使用partition by)

    目录 我想要的效果 Group By Group By 语法 Group By 错误示例 重点提醒 功能实现(partition by 分区函数) 以往查询出来的数据想要按照某一个字段分组展示,直接按 ...

  4. es统计有多少个分组_es多字段分组去重统计

    < es多字段分组去重统计 oracle中sql: select a1 ,b1 from dual group by a1 ,b1 或 select DISTINCT a1 ,b1 from d ...

  5. 【mysql技巧】按某一字段分组取最大(小)值所在行的数据

    mysql技巧--按某一字段分组取最大(小)值所在行的数据,这是mysql数据库程序员经常用到的在处理一些报表数据时候可以活用!那么猎微网将总结几种mysql查询最大值 mysql查询最小值的方法! ...

  6. mysql按某一字段分组取最大(小)值所在行的数据

    mysql按某一字段分组取最大(小)值所在行的数据   mysql技巧--按某一字段分组取最大(小)值所在行的数据,这是mysql数据库程序员经常用到的在处理一些报表数据时候可以活用!那么猎微网将总结 ...

  7. java8 多个字段分组_MySQL基础之分组查询

    在MySQL 查询 语句中,允许使用 GROUP BY 子句对结果分组. GROUP BY语法: select 分组函数, 列(要求在group by 子句后面)from 表名[where 条件]gr ...

  8. MYSQL多字段分组having子句

    一.多字段分组的意义 group by 子句的分组字段是一个字段列表,即 MySQL 支持按多个字段进行分组.具体的分组策略:分组优先级从左至右,即先按第一个字段进行分组,然后在第一个字段值相同的记录 ...

  9. by group 累加中文字段_EF 求和 GroupBy多个字段

    GroupBy根据多个字段分组使用方式: 一.使用扩展方法 query.GroupBy(q => new { q.Year, q.Month }) .Select(q => new { Y ...

最新文章

  1. 获取执行SQL语句的返回结果
  2. android怎么搭建人脸库,OpenCV-2.4.6-android-sdk 人脸识别demo搭建
  3. python dlib学习(二):人脸特征点标定
  4. Java中同时输入字符串和int类型出错的处理方式
  5. springboot实现上传文件
  6. oracle存储过程拼',【求助】关于oracle存储过程'字符串拼接'
  7. 你必须承认电子计算机是天之骄子,天之骄子造句
  8. cad坐标归零lisp_「软件技巧」厉害了!输入简单命令轻松解决CAD几类常见问题...
  9. azw3转换为pdf_干货:如何Java 将 Word 文档转换为 PDF
  10. java socket 断开连接_Socket.IO-client.java重复断开连接并重新连接
  11. Spring-02-AOP切面编程
  12. 【erlang ~ 4 days】 Day # 1.1 History
  13. 杰克·韦尔奇的101条经典语录
  14. 2022爱分析· 地产科技厂商全景报告
  15. hprose php用户手册,04 协程 - 《Hprose for PHP 用户手册》 - 书栈网 · BookStack
  16. 深度强化学习——A3C
  17. 分享10个可免费使用的网站CDN加速服务
  18. web前端面试(1) 前端缓存怎么做?
  19. 示波器电流探头传播延迟的测量
  20. Python字符串转义符大全

热门文章

  1. 移动端测试===adb shell top命令解释
  2. asp.net中GridView多行表头导出Excel表头显示不全问题解决方法
  3. Webpack入门——使用Webpack打包Angular项目的一个例子
  4. SQL Server 默认跟踪 -- 捕获事件详解
  5. initrd的使用及说明
  6. C++指针探讨 (二) 函数指针
  7. 英特尔公司面向 Android 软件开发套件(SDK)4.3 的 x86 Android* 系统映像的内部评估许可协议...
  8. (libgdx学习)GestureDetector
  9. 使用FragmentTabHost+Fragment+viewpager 实现滑动分页
  10. Java中加载properties文件的6种方法