在平时的开发任务中我们经常会用到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字段值的记录放到一个分组里。

group by 多字段分组的更多相关文章

  1. group by多字段分组

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

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

    SQL Server 按某一字段分组 取 最大 (小)值所在行的数据 -- 按某一字段分组 取 最大 (小)值所在行的数据 -- (爱新觉罗.毓华(十八年风雨,守得冰山雪莲花开) 2007-10-23 ...

  3. 每日学习心得:CustomValidator验证控件验证用户输入的字符长度、Linq 多字段分组统计、ASP.NET后台弹出confirm对话框,然后点击确定,执行一段代码

    2013-9-15 1.    CustomValidator验证控件验证用户输入的字符长度 在实际的开发中通常会遇到验证用户输入的字符长度的问题,通常的情况下,可以写一个js的脚本或者函数,在ASP ...

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

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

  5. mysql根据某个字段分组根据更新时间获取最新的记录

    我现在有一种统计表,要根据一个字段分组然后根据更新时间,每个分组获取最新的一条记录.命名感觉挺简单的一个需求,然而没什么思路,当然是问度娘了. 度娘的答案很统一,然而都不管用,都是报错的,不知道是不是 ...

  6. Sql按照字段分组,选取其他字段最值所在的行记录

    引言: 为什么会引入这个问题,在程序中遇到这样的问题,在某个数据表中,相同的AID(项目ID)被多次添加到数据表中,所以对应于不同的时间,只想选取添加时间最早的哪一条记录. 参考:红黑联盟 所用到的数 ...

  7. sql多字段分组排序显示全部数据

    建表sql CREATE TABLE `tbl_demo` ( `id` ) COLLATE utf8_bin NOT NULL, `payer_name` ) COLLATE utf8_bin DE ...

  8. 2.(group by)如何让分组后,每组中的数据按时间倒序排列(group by和 order by的分组按排列)

    比如说有表devicedata: 问题: 现在我想将devicedata这个表中的数据,先按device_id这个字段分组,然后每组中的数据按时间字段ts从大到小的排列, 如何解决呢? 错误的sql: ...

  9. MySQL在按照某个字段分组、排序加序号

    事情是这样的,最近领导给了一个新的需求,要求在一张订单表中统计每个人第一次和第二次购买的时间间隔,最后还需要按照间隔统计计数,求出中位数等数据. 由于MySQL不想Oracle那般支持行号.中位数等, ...

随机推荐

  1. python实战第一天-pymysql模块并练习

    操作系统 Ubuntu 15.10 IDE & editor JetBrains PyCharm 5.0.2 ipython3 Python版本 python-3.4.3 安装pymysql模 ...

  2. java中构造方法及其作用

    构造方法作用就是对类进行初始化. 如果你没有定议任何构造方法的形式,程式会为你取一个不带任何参数的构造函数,那么你产生类的对像时只能用不带参数的方法,如:class a {}//没有任何构造函数. 构 ...

  3. Vue.js安装

    环境 操作系统:window7 虚拟机:centos7 vue.js: 2.8 安装nodejs 参考我得文章: http://blog.csdn.net/u013066244/article/det ...

  4. Loadrunner常见错误处理方法

    1.错误 -26601: 解压缩函数(wgzMemDecompressBuffer)失败,返回代码=-5 (Z_BUF_ERROR).inSize=0.inUse=0.outUse=0 用LR做压力测 ...

  5. 1.SpringBoo之Helloword 快速搭建一个web项目

    背景: Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配 ...

  6. 解决火狐中用JQUERY .removeAttr()无法去除元素属性的方法

    //为元素添加只读属性 $("#test").attr("readonly","readonly") //去除元素的只读属性 $(" ...

  7. Qt版权符号显示问题

    在个别界面中需要显示版权信息,其中©符号在界面上显示,有时会偏小或者显示为问号~ 其中一种解决办法用html的方式显示实体字符(©>Copyright© 2016</font>&qu ...

  8. python 第二天

    list,tuple,dict,set list,tuple,dict,set 是今天学习的四种 Python 内置类型 list list 即数组,有序的集合,可以使用索引的方式来访问 list 的 ...

  9. Linux中mysql乱码问题

    注意: 关于utf8和gbk的区别详细见:linux中文乱码问题解决办法 http://www.linuxidc.com/Linux/2010-04/25757.htm ,下面的配置中根据自己要求选择 ...

  10. jdbc电话本项目

    整体思路:在登陆之后才能查看自己的电话本,电话本中包含用户名,联系人名字,电话,性别,分类: 1.登陆注册页面--数据库User表,注册登陆使用 2.电话本的前段显示,用表格和表单, 3.创建存取的电 ...