상세 컨텐츠

본문 제목

[오라클] 피봇 언피봇 매우 어렵다 외우기

데이터베이스

by esoesmio 2023. 4. 17. 14:07

본문

 

 

 

pivot으로 과목명을 열로 만들고 과목명에 해당하는 기말고사 성적의 평균값

일반적인 방법으로 만들기 과목명이 왼쪽에 주루룩

 

피벗으로 만들기 과목명이 위로 주루룩
그냥 디코드로 만들기 과목명이 위로 주루룩

 

그냥 디코드로 만든걸 과목명을 세로로 만들기 과목명이 왼쪽에 주루룩
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 ('ㅁ','ㅂ'))

;

관련글 더보기

댓글 영역