标题:[求助]关于group by分组查询问题
只看楼主
冬日暖阳
Rank: 1
等 级:新手上路
帖 子:50
专家分:0
注 册:2007-7-2
 问题点数:0 回复次数:2 
[求助]关于group by分组查询问题
帮帮忙,给我解释一下avg在这代表什么意思?还有group by后面接的字段名有什么要求,为什么我把它换成r_result得出的也是一样的结果.另外还有with cube与with rollup具体区分在哪呢



select r_courseno,avg(r_result)课程平均成绩
from result
group by r_courseno
with cube
搜索更多相关主题的帖子: group cube 分组 result avg 
2007-07-06 11:12
紫依斓
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2007-8-14
得分:0 
avg是求平均值
没有用到集合函数的列要放到group by 后面

2007-08-15 12:02
sky_yang_sky
Rank: 3Rank: 3
等 级:论坛游民
威 望:8
帖 子:481
专家分:16
注 册:2007-5-30
得分:0 

avg是求平均值,
gropu by 是用來進行分組的,同是要符合沒有用到集合函數的並且用SELECT顯示出的列要放到其後
with cube 與with rollup區分如下。這些在網上都有,可以自己找找。
--创建测试表
use test
create table test(id int,sort char(10),color char(10),num int constraint pk_test primary key(id,sort,color))

--插入数据
insert into test
select 1,'book','blue',10
union all
select 1,'book','green',10
union all
select 1,'book','red',10
union all
select 1,'car','blue',10
union all
select 1,'car','red',10
union all
select 2,'car','red',10


--group by
select sort,color,sum(num) as num from test group by sort,color

--输出结果
--book blue 10
--car blue 10
--book green 10
--book red 10
--car red 20

--group by with rollup
select
case
when grouping(sort)=1 then 'all'
else isnull(sort,'unknow')
end as sort,
case
when grouping(color)=1 then 'all'
else isnull(color,'unknow')
end as color,
sum(num) as num from test
group by sort,color with rollup

--输出结果
--book blue 10
--book green 10
--book red 10
--book all 30
--car blue 10
--car red 20
--car all 30
--all all 60

--group by with cube
select
case
when grouping(sort)=1 then 'all'
else isnull(sort,'unknow')
end as sort,
case
when grouping(color)=1 then 'all'
else isnull(color,'unknow')
end as color,
sum(num) as num from test
group by sort,color with cube

--输出结果
--book blue 10
--book green 10
--book red 10
--book all 30
--car blue 10
--car red 20
--car all 30
--all all 60
--all blue 20
--all green 10
--all red 30

总结:
1、CUBE 和 ROLLUP 之间的区别在于:
• CUBE 生成的结果集显示了所选列中值的所有组合的聚合。
• ROLLUP 生成的结果集显示了所选列中值的某一层次结构的聚合。
2、GROUPING是一个聚合函数,它产生一个附加的列,当用 CUBE 或 ROLLUP 运算符添加行时,附加的列输出值为1,当所添加的行不是由 CUBE 或 ROLLUP 产生时,附加列值为0。
仅在与包含 CUBE 或 ROLLUP 运算符的 GROUP BY 子句相联系的选择列表中才允许分组。


你微笑的面對整個世界,整個世界也將會微笑的面對你。
2007-08-15 17:27



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-153202-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.307684 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved