欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

MySql Group By对多个字段进行分组的实现方法

程序员文章站 2024-02-04 14:30:40
在平时的开发任务中我们经常会用到mysql的group by分组, 用来获取数据表中以分组字段为依据的统计数据。比如有一个学生选课表,表结构如下: table:...

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

以上所述是小编给大家介绍的mysql group by对多个字段进行分组,希望对大家有所帮助