日期:2014-05-16  浏览次数:20407 次

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后面