Group By ,你会用么


    学生评教系统做完了,在测试的时候,遇到这样一个问题,多人对同一个教师评分后,分数统计完毕会出现成绩统计混乱的问题,后来找到了问题的症结:原来是Group By 在作怪。下面简单总结下Group By,以便今后少犯错误!


一、Group By语句

     Group By 语句用于结合合计函数,根据一个或多个列对结果集进行分组

    :合计函数,又称聚合函数(Aggregate Function):查询中使用表中一个数据列中所有数据行的数据进行运算的函数,例如SUM(求和),AVG(求平均值),COUNT(记录个数),MAX(求最大值),MIN(求最小值)。


二、SQL Group By 语法

         

    注意两点:
    1、所谓分类汇总,就是说SELECT后边不是分类字段就是汇总的字段.分类就是和group by后边的字段一致,汇总就是有聚集函数的字段
    2、SELECT后面的在聚合函数:Sum、Avg、Min、Max、Count中的列名不用出现在group by 后面中,其他的列都要

三、SQL Group By实例

     我们拥有下面这个“Orders”表

      

    现在我们希望查找每个教师对应的成绩(总成绩)。我们需要使用Group By 语句对客户进行组合。

    我们使用下列SQL语句。          

    效果还行吧,是不?

    让我们看一下如果省略Group By 会出现什么情况:


    上面的结果集不是我们需要的。

  

    那么为什么不能使用上面这条 SELECT 语句呢?解释如下:上面的 SELECT 语句指定了两列(Customer 和 SUM(OrderPrice))。"SUM(OrderPrice)" 返回一个单独的值("OrderPrice" 列的总计),而 "Customer" 返回 6 个值(每个值对应 "Orders" 表中的每一行)。因此,我们得不到正确的结果。不过,您已经看到了,GROUP BY 语句解决了这个问题。


四、统计成绩时Group By的使用

    看完前面的介绍,然后描述一下我在项目中遇到的问题背景:我们做的是一个评教系统,学生对教师评分完毕,分数统计在所难免,我写了一个存储过程完成了分数的统计,结果分数统计结果不像我想的那样,郁闷了半天,原来是Group By在搞怪,我错误的将聚合函数的列名写在了Group By后面

    

    统计结果展示

    有两个学生对教师打分,其中一个学生对两个教师打分,另一个学生只对一个教师打分,评分项目是5项,因此项目成绩表中数据条数为15条。

      

     经过统计后,正确的查询结果应该是

     

     Group By后误加聚合函数字段的结果

     

   展览一下正确与错误的sql统计语句区别在哪里

      

    

    进行至此,对Group By 应该有了大致的了解,使用时要注意使用约束哦!

    

===============================附加错误更改================================


    附加:感谢抠脚大汉的评论,测试后,发现我统计成绩的错误不是“聚合函数的列名写在了Group By后面”,我group by后面使用统计成绩之前的字段,犯错了!

        


  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值