--fzq
create table fzq
(
id varchar(2),
name varchar(10),
course varchar(20),
score number(3)
);
insert into fzq values ('1','张三','语文',80);
insert into fzq values('2','张三','数学',70);
insert into fzq values ('3','李四','语文',40);
insert into fzq values ('4','李四','数学',100);
insert into fzq values ('5','王五','语文',90);
insert into fzq values ('6','王五','数学',92);
--方法一
--0
select * from fzq;
ID NAME COURSE SCORE
-- ---------- -------------------- ----------
1 张三 语文 80
2 张三 数学 70
3 李四 语文 40
4 李四 数学 100
5 王五 语文 90
6 王五 数学 92
--1
select name, course, round(avg(score),1) score
from fzq
group by cube(name,course);
NAME COURSE SCORE
---------- -------------------- ----------
78.7
数学 87.3
语文 70
李四 70
李四 数学 100
李四 语文 40
王五 91
王五 数学 92
王五 语文 90
张三 75
张三 数学 70
张三 语文 80
--2
select name 姓名,
(case when course = '语文' then score else 0 end) as 语文,
(case when course = '数学' then score else 0 end) as 数学
from(
select name, course, round(avg(score),1) score
from fzq
group by cube(name,course)
);
姓名 语文 数学
---------- ---------- ----------
0 0
0 87.3
70 0
李四 0 0
李四 0 100
李四 40 0
王五 0 0
王五 0 92
王五 90 0
张三 0 0
张三 0 70
张三 80 0
--3
select coalesce(name,'平均分') 姓名,
max(case when course = '语文' then score else 0 end) as 语文,
max(case when course = '数学' then score else 0 end) as 数学
from(
select name, course, round(avg(score),1) score
from fzq
group by cube(name,course)
)
group by name;
姓名 语文 数学
---------- ---------- ----------
李四 40 100
王五 90 92
张三 80 70
平均分 70 87.3
--方法二
--0
select * from fzq;
ID NAME COURSE SCORE
-- ---------- -------------------- ----------
1 张三 语文 80
2 张三 数学 70
3 李四 语文 40
4 李四 数学 100
5 王五 语文 90
6 王五 数学 92
--1
select name 姓名,
(case when course='语文' then score else 0 end) as 语文,
(case when course='数学' then score else 0 end) as 数学
from fzq;
姓名 语文 数学
---------- ---------- ----------
张三 80 0
张三 0 70
李四 40 0
李四 0 100
王五 90 0
王五 0 92
--2
select name 姓名,
max(case when course='语文' then score else 0 end) as 语文,
max(case when course='数学' then score else 0 end) as 数学
from fzq
group by name
union all
select '平均分',avg(cn),round(avg(math),1)from(
select name,
max(case when course='语文' then score else 0 end) as cn,
max(case when course='数学' then score else 0 end) as math
from fzq
group by name);
姓名 语文 数学
---------- ---------- ----------
王五 90 92
李四 40 100
张三 80 70
平均分 70 87.3
create table fzq
(
id varchar(2),
name varchar(10),
course varchar(20),
score number(3)
);
insert into fzq values ('1','张三','语文',80);
insert into fzq values('2','张三','数学',70);
insert into fzq values ('3','李四','语文',40);
insert into fzq values ('4','李四','数学',100);
insert into fzq values ('5','王五','语文',90);
insert into fzq values ('6','王五','数学',92);
--方法一
--0
select * from fzq;
ID NAME COURSE SCORE
-- ---------- -------------------- ----------
1 张三 语文 80
2 张三 数学 70
3 李四 语文 40
4 李四 数学 100
5 王五 语文 90
6 王五 数学 92
--1
select name, course, round(avg(score),1) score
from fzq
group by cube(name,course);
NAME COURSE SCORE
---------- -------------------- ----------
78.7
数学 87.3
语文 70
李四 70
李四 数学 100
李四 语文 40
王五 91
王五 数学 92
王五 语文 90
张三 75
张三 数学 70
张三 语文 80
--2
select name 姓名,
(case when course = '语文' then score else 0 end) as 语文,
(case when course = '数学' then score else 0 end) as 数学
from(
select name, course, round(avg(score),1) score
from fzq
group by cube(name,course)
);
姓名 语文 数学
---------- ---------- ----------
0 0
0 87.3
70 0
李四 0 0
李四 0 100
李四 40 0
王五 0 0
王五 0 92
王五 90 0
张三 0 0
张三 0 70
张三 80 0
--3
select coalesce(name,'平均分') 姓名,
max(case when course = '语文' then score else 0 end) as 语文,
max(case when course = '数学' then score else 0 end) as 数学
from(
select name, course, round(avg(score),1) score
from fzq
group by cube(name,course)
)
group by name;
姓名 语文 数学
---------- ---------- ----------
李四 40 100
王五 90 92
张三 80 70
平均分 70 87.3
--方法二
--0
select * from fzq;
ID NAME COURSE SCORE
-- ---------- -------------------- ----------
1 张三 语文 80
2 张三 数学 70
3 李四 语文 40
4 李四 数学 100
5 王五 语文 90
6 王五 数学 92
--1
select name 姓名,
(case when course='语文' then score else 0 end) as 语文,
(case when course='数学' then score else 0 end) as 数学
from fzq;
姓名 语文 数学
---------- ---------- ----------
张三 80 0
张三 0 70
李四 40 0
李四 0 100
王五 90 0
王五 0 92
--2
select name 姓名,
max(case when course='语文' then score else 0 end) as 语文,
max(case when course='数学' then score else 0 end) as 数学
from fzq
group by name
union all
select '平均分',avg(cn),round(avg(math),1)from(
select name,
max(case when course='语文' then score else 0 end) as cn,
max(case when course='数学' then score else 0 end) as math
from fzq
group by name);
姓名 语文 数学
---------- ---------- ----------
王五 90 92
李四 40 100
张三 80 70
平均分 70 87.3