回 帖 发 新 帖 刷新版面

主题:GROUP BY不理解

/////////////////////////////////////////
SELECT *
FROM T_RESULT

结果:

   t_r_studentno  t_r_courseno      t_r_result t_r_semester t_r_year
1. 20050101    2005010001    89.5      1         2005
2. 20050101    2005010002    92.0      1         2005
3. 20050201    2005010003    78.0      2         2005
4. 20050202    2005010004    94.5      2         2005


SELECT t_r_courseno,AVG(t_r_result) 课程平均成绩
FROM T_RESULT
GROUP BY t_r_courseno
WITH CUBE

结果:
2005010001    89.500000
2005010002    92.000000
2005010003    78.000000
2005010004    94.500000
NULL             88.500000

一说分组我就晕了。看到这WITH CUBE更晕。有人能给讲下么?
还有就是AVG()是不是与GROUP BY t_r_courseno有着某种联系啊?因为
SELECT t_r_courseno,AVG(t_r_result) 课程平均成绩
FROM T_RESULT
不能运行。

回复列表 (共7个回复)

沙发


你好
SELECT t_r_courseno,AVG(t_r_result) 课程平均成绩
FROM T_RESULT不能运行,是因为在有GRUPER  BY语句中 select 语句中要除了聚合函数以外,列名必须在GRUPER BY语句后出现,with cube 是对它分列名处理

板凳

楼上的GRUPER  BY是不是打错了,应该是GROUP BY是么?

3 楼

[quote]
你好
SELECT t_r_courseno,AVG(t_r_result) 课程平均成绩
FROM T_RESULT不能运行,是因为在有GRUPER  BY语句中 select 语句中要除了聚合函数以外,列名必须在GRUPER BY语句后出现,with cube 是对它分列名处理[/quote]

不明白能再说详细点么?我刚刚接触SQL。

4 楼

因为avg是一个聚合函数,所以必须使用group by标明所有除了聚合函数的列,确定如何分组。

5 楼

谢谢4楼的,那个问题我已经弄清楚了,帮忙回复下我4月3号发的别的帖子好么?
也是关于SQL语句的。

6 楼

其实我对这个group by语句也不是很了解。
比如说上面这个例子。如果我group by后面加的是t_r_studentno 列
那么出来的结果就是
20050101       91
20050201       78
20050202       94.5

7 楼

你要求平均成绩很简单啊。。你分组要看你按学号还是按科目了。。你按学号的话只求个人的平均他啊。。按成绩的话求出来的是全部同学的平均分啊。。这有什么不明白的呢?

我来回复

您尚未登录,请登录后再回复。点此登录或注册