pivot으로 과목명을 열로 만들고 과목명에 해당하는 기말고사 성적의 평균값
정역학, 유기화학, 양자물리학의 평균값을 구하여라
일반적인 방법으로 만들기 과목명이 왼쪽에 주루룩
select course.cname, avg(score.result)
from course course,
score score
where course.CNO = score.CNO
group by course.cname
having cname in ('정역학', '유기화학', '양자물리학');
피벗으로 만들기 과목명이 위로 주루룩
select *
from (select course.cname, score.result
from course course,
score score
where course.CNO = score.CNO)
pivot (
avg(result)
for cname in ('유기화학' as 유기화학, '무기화학' as 무기화학, '정역학' as 정역학)
);
그냥 디코드로 만들기 과목명이 위로 주루룩
select *
from (select avg(decode(cname, '정역학', result)) as 정역학,
avg(decode(cname, '일반화학', result)) as 일반화학,
avg(decode(cname, '양자물리학', result)) as 양자물리학
from score
natural join course);
그냥 디코드로 만든걸 과목명을 세로로 만들기 과목명이 왼쪽에 주루룩
select *
from (select avg(decode(cname, '정역학', result)) as 정역학,
avg(decode(cname, '일반화학', result)) as 일반화학,
avg(decode(cname, '양자물리학', result)) as 양자물리학
from score
natural join course)
unpivot (
resavg for cname in (정역학, 일반화학, 양자물리학)
)
;
무한피봇 하는법;
SELECT *
FROM (SELECT *
FROM (SELECT cname, result
FROM course
NATURAL JOIN score)
PIVOT (
AVG(result) -- 집계 함수(AVG)를 추가합니다
FOR cname IN ('정역학' AS jung, '무기화학' AS mugi)
))
UNPIVOT (
AVG_RESULT -- 컬럼 이름을 `HAHA`에서 `AVG_RESULT`로 변경합니다
FOR CNAME IN (jung, mugi) -- `CNAME` 컬럼 이름을 PIVOT 구문에서 지정된 컬럼 이름으로 변경합니다
);
select * from (
select * from (
select *
from (select cname, result
from course
natural join SCORE
)
pivot ( avg(result) for cname in ('정역학' ㅁ, '유기화학' ㅂ)))
unpivot ( avg_result for cname in (ㅁ,ㅂ) ))
pivot (avg(avg_result) for cname in ('ㅁ','ㅂ'))
;
[오라클]4.17 문제 및 풀이 (0) | 2023.04.17 |
---|---|
[오라클] 4월 17일 예제 (0) | 2023.04.17 |
[오라클]4월 14일 수업예제 (16) | 2023.04.14 |
[오라클]4월 14일 문제와 문제풀이 (0) | 2023.04.14 |
[오라클] groupby having important point (0) | 2023.04.14 |
댓글 영역