mysql数据库中group by和sum一起使用语句

作者: adm 分类: mysql 发布时间: 2023-04-11

一、案例1
还记得我们以前讲过的用SUM这个mysql函数来查出数据表中所有的人的总数和吧?当然那个时候是一个整体的和,如果现在我们要查询的是男生和女生的各自的总年龄怎么查呢?查询的sql语句又该怎么写呢?其实这是我们只要把人按性别来分组,然后还是用SUM函数来求和就可以了,关键是怎么分组呢,这就要用到mysql的group by语句了,它可以实现分组,下面看看sql语句吧:

  SELECT SUM("栏目1") FROM "表格名" GROUP BY "栏目2"

比如我们的数据库信息如下(sex中1表示男生,0表示女生):

  msg_info 表格

  name      age             sex

  Los          20             1

  San         25              0

  Lan         30           0

       Bos         23              1

  mini            28                1

  于是我们我们的sql语句就形成了:

  SELECT sex,sum(age) FROM `msg_info` group by sex

  结果:

    sex            sum(age)  

     0       55

     1       71

二、案例2
mysql的手册中对SUM函数的介绍非常简单和含糊, 今天在搜资料的时候发现SUM函数的参数还可以加入条件判断.
比如有如下的一个表:

日期                    支出项目名称                          支出类别           支出金额             类别编号

2006-07-03          购买发票                                   发票                  709                            2
2006-07-05         华夏干红2瓶(单价32)                吧台支出               64                             3
2006-07-05         鲜橙多33瓶(单价1)                 吧台支出                33                             3
2006-07-05         购雪碧,百事42瓶(单价2)          吧台支出               84                              3
2006-07-05         购菜金                                      其它                   180.6                          1
2006-07-05         手机网络费                               办公用品                   8                         4
2006-07-05         手机SIM卡一张                           办公用品             20                         4
2006-07-05         手机英华OK106一台                    办公用品           310                         4
2006-07-05         购饮料人工费                                吧台支出         3                         3
2006-07-05         冰点水17瓶(单价2)                      吧台支出         34                         3
2006-07-06         广告费                                           其它                 900                         1
2006-07-06         微波炉                                      其它                 299                         1
2006-07-06         垃圾桶                                  其它                        30                         1
2006-07-06         意见簿                                   其它                       20                         1
2006-07-06         冰糖夹                                其它                          4                         1
2006-07-06         开刀                                 其它                            6                         1
2006-07-06         修正液                         办公用品                        2                         4
2006-07-06         圆珠笔芯                       办公用品                     8                         4
2006-07-06         打码机,印泥                 办公用品                       7                         4
2006-07-06         收银夹                         办公用品                       9                         4


现在要对每天, 每种支出类别的总和建立一个视图,可以用这样的语句:

CREATE VIEW `tbl_view` AS SELECT
日期,
SUM( IF( 类别编号 =1, 支出金额, 0 ) ) AS 其它支出,
SUM( IF( 类别编号 =2, 支出金额, 0 ) ) AS 发票,
SUM( IF( 类别编号 =3, 支出金额, 0 ) ) AS 吧台支出,
SUM( IF( 类别编号 =4, 支出金额, 0 ) ) AS  办公用品
FROM `tbl`
ORDER BY `日期`
GROUP BY `日期`


建好的视图 tbl_view会是这个样子:

日期                其它支出                发票                吧台支出                办公用品 
2006-07-03        0                        709                0                        0
2006-07-05        180.6                        0                218                        138
2006-07-06        1253                        0                0                        26

总结
语句 SUM( IF( 类别编号 =1, 支出金额, 0 ) ) AS 其它支出,
表示当类别编号为1的时候对支出金额列求和

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!