日期:2014-05-16 浏览次数:20434 次
学生评教系统做完了,在测试的时候,遇到这样一个问题,多人对同一个教师评分后,分数统计完毕会出现成绩统计混乱的问题,后来找到了问题的症结:原来是Group By 在作怪。下面简单总结下Group By,以便今后少犯错误!
Group By 语句用于结合合计函数,根据一个或多个列对结果集进行分组。
注:合计函数,又称聚合函数(Aggregate Function):查询中使用表中一个数据列中所有数据行的数据进行运算的函数,例如SUM(求和),AVG(求平均值),COUNT(记录个数),MAX(求最大值),MIN(求最小值)。
我们拥有下面这个“Orders”表
现在我们希望查找每个教师对应的成绩(总成绩)。我们需要使用Group By 语句对客户进行组合。
我们使用下列SQL语句。
效果还行吧,是不?
让我们看一下如果省略Group By 会出现什么情况:
上面的结果集不是我们需要的。
那么为什么不能使用上面这条 SELECT 语句呢?解释如下:上面的 SELECT 语句指定了两列(Customer 和 SUM(OrderPrice))。"SUM(OrderPrice)" 返回一个单独的值("OrderPrice" 列的总计),而 "Customer"
返回 6 个值(每个值对应 "Orders" 表中的每一行)。因此,我们得不到正确的结果。不过,您已经看到了,GROUP BY 语句解决了这个问题。
看完前面的介绍,然后描述一下我在项目中遇到的问题背景:我们做的是一个评教系统,学生对教师评分完毕,分数统计在所难免,我写了一个存储过程完成了分数的统计,结果分数统计结果不像我想的那样,郁闷了半天,原来是Group By在搞怪,我错误的将聚合函数的列名写在了Group By后面