在平时的开发任务中咱们常常会用到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:code
SELECT Subject, Count(*) FROM Subject_Selection GROUP BY Subject
获得以下结果:ip
Subject Count ------------------------------ ITB001 5 MKB114 2
由于表里记录了有5个学生选择ITB001,2个学生选择了MKB114。开发
产生这个结果的缘由是:
GROUP BY X意思是将全部具备相同X字段值的记录放到一个分组里。
那么GROUP BY X, Y呢?
GROUP BY X, Y意思是将全部具备相同X字段值和Y字段值的记录放到一个分组里。io
咱们下面再接着要求统计出每门学科每一个学期有多少人选择,应用以下SQL:class
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。总结
再好比有一个订单表,表中记录了全部支付过的订单stackoverflow
Table: Order 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 `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字段值的记录放到一个分组里。
参考连接:
http://stackoverflow.com/questions/2421388/using-group-by-on-multiple-columns