Resumo da aprendizagem desta semana
Experiência de aprendizagem
昨晚写的实验报告,写得焦头烂额
一脸懵逼,分不清rollup,cube和grouping sets
今天在老师的讲解之下,仿佛get了点什么
Conteúdo de aprendizagem
1.Rollup
Rollup(X,Y,Z)
按
X,Y,Z
X,Y
Z
0
进行分组
Dê uma castanha
SELECT SNO,CNO,AVG(DEGREE) as 平均分 FROM Score
GROUP BY ROLLUP(SNO,CNO)
- Os fora da caixa são agrupados de acordo com (SNO, CNO); a primeira caixa vermelha é agrupada de acordo com o SNO; a segunda caixa vermelha é a linha de resumo total
- (As linhas de resumo GROUP BY são exibidas como NULL no resultado, mas podem ser usadas para representar todos os valores)
- Os parâmetros no rollup estão relacionados à ordem
- Agrupar por rollup (X, Y, Z) 于 于 Agrupar por X, Y, Z com rollup
2.CUBO
CUBE(X,Y,Z)
按
X,Y,Z
X,Y
X,Z
Y,Z
X
Y
Z
0
进行分组
Dê uma castanha
SELECT SNO, CNO,AVG(DEGREE) as 平均分 FROM SCORE
GROUP BY SNO,CNO WITH CUBE
- Semelhante ao rollup
- Os fora da caixa são agrupados de acordo com (SNO, CNO); a primeira caixa vermelha é agrupada de acordo com o SNO; a segunda caixa vermelha é a linha de resumo total
- Mas o cubo é mais agrupado do que o rollup, de acordo com a CNO, que é a caixa azul
- Os parâmetros no rollup estão relacionados à ordem
- Agrupar por rollup (X, Y, Z) 于 于 Agrupar por X, Y, Z com rollup
Conjuntos de agrupamento
Grouping Sets(X,Y,Z)
按
X
Y
Z
进行分组
Dê uma castanha
SELECT SNO,CNO,AVG(DEGREE) as 平均数 FROM SCORE
GROUP BY GROUPING SETS (SNO,CNO)
- A caixa vermelha é agrupada de acordo com o SNO, a caixa azul é agrupada de acordo com a CNO
4. Outros
SELECT SNO,CNO,AVG(DEGREE) FROM SCORE092
GROUP BY GROUPING SETS (ROLLUP(SNO,CNO)) --等价于ROLLUP(SNO,CNO)
--或者 GROUPING SETS((SCO,CNO),SNO) union select null,null,avg(degree) from Score
--因为sets里面不能放空数据,若不用rollup cube,则grouping sets不会出现 null null的数据
所以需要使用union将空数据加进去
同理GROUP BY GROUPING SETS (CUBE(SNO,CNO)) 也是如此
SELECT SNO,CNO,AVG(DEGREE) FROM Score092
GROUP BY GROUPING SETS (ROLLUP(SNO,CNO),CUBE(SNO,CNO))
相当于{(SNO,CNO),SNO,0,(SNO,CNO),SNO,CNO,0}并没有去掉重复数据
5. Título
5.1 Consultar informações do aluno, incluindo número do aluno, número do curso, nota e nota média do aluno. (Uma declaração)
SELECT Sno 学号,ISNULL(Cno,'平均') 课程号, cast AVG(Degree) AS numeric(4,1) '成绩/平均分' from SCORE
GROUP BY Sno,Cno WITH ROLLUP --GROUP BY GROUPING SETS((SNO,CNO),SNO)
having sno is not null
- ISNULL (a, b): se os dados a forem NULL, use os dados b
- As funções agregadas não podem ser gravadas depois de onde, elas precisam ser gravadas depois de ter e as colunas de agrupamento podem ser seguidas depois de ter
5.2 Consultar informações do aluno, incluindo nome, nome do curso, notas, nota média de cada aluno e nota média de cada curso. (Uma declaração)
SELECT ISNULL(s.Sname,'平均') 姓名,ISNULL(c.Cname,'平均') 课程名,AVG(Degree) AS '成绩/平均分' from Student s
join Score sc on sc.Sno=s.Sno join Course c on c.Cno=sc.Cno
GROUP BY s.Sname,c.Cname WITH CUBE --GROUP BY GROUPING SETS((SNO,CNO),SNO,CNO)
- Você precisa recuperar a pontuação média de cada aluno e a pontuação média de cada curso, para conectar a tabela de pontuação e a tabela de curso
5.3 Consultar informações do aluno, incluindo número do aluno, nome, número do curso, nome do curso, notas e a pontuação média de cada aluno e a pontuação média de cada curso. (Uma declaração)
SELECT ISNULL(s.Sno,'平') 学号,ISNULL(s.Sname,'均') 姓名,ISNULL(c.Cno,'平') 课程号,ISNULL(c.Cname,'均') 课程名,AVG(Degree) as '成绩/平均分'
from Student s join Score sc on sc.Sno=s.Sno join Course c on c.Cno=sc.Cno
GROUP BY GROUPING SETS((s.Sno,s.Sname,c.Cno,c.Cname),(s.Sno,s.Sname),(c.Cno,c.Cname)) --GROUP BY GROUPING SETS(cube((s.Sno,s.Sname),(c.Cno,c.Cname)))
- Precisa recuperar (número do aluno, nome), (número do curso, nome do curso), então junte-os para recuperar
5.4 Consultar informações do aluno, incluindo número do aluno, nome, número do curso, nome do curso e a pontuação média de cada aluno e a pontuação média de cada curso. (Uma declaração)
SELECT ISNULL(s.Sno,'平') 学号,ISNULL(s.Sname,'均') 姓名,ISNULL(c.Cno,'平') 课程号,ISNULL(c.Cname,'均') 课程名,AVG(Degree) AS '成绩/平均分'
from Student s join Score sc on sc.Sno=s.Sno join Course c on c.Cno=sc.Cno
GROUP BY GROUPING SETS((s.Sno,s.Sname),(c.Cno,c.Cname))