2018년 10월 2일 화요일

[SQL Server] 과제 피봇을 사용하지 않고 원하는 결과 출력하기

실장님과 이야기 하다가 풀어보라고 하셔서 작성한 문제이다.




다음과 같은 결과를 출력 하는 것이 목적
SSMS를 사용하지 않고 머리 속에서 그려보고 답안 작성해보기
목적은 RDBMS에 대한 명확한 이해를 하기 위함이다.

오답도 함께 공유한다.

1) 
SELECT 이름, SUM(영어) AS 영어, SUM(수학) AS 수학, (영어+수학)/2 AS 평균
FROM (SELECT 이름,
    CASE WHEN 영어 THEN 점수 ELSE 0 ELSE 0 END AS 영어,
    CASE WHEN 수학 THEN 점수 ELSE 0 ELSE 0 END AS 수학,
    FROM A) AS B
GROUP BY 이름

=> 답은 될 수 있지만 원하는 답은 아니다. 물건을 하나씩 들고 올라갈지 한 번에 들고 올라갈지 고민해야 한다.

2) 
SELECT 이름, 
    CASE WHEN 과목 = 영어 THEN SUM (점수) END AS 영어
    CASE WHEN 과목 = 수학 THEN SUM (점수) END AS 수학
    AVG(점수) AS 평균
FROM A
GROUP BY 이름

=> 오답이다. 에러가 발생 될 것 같다. GROUP BY가 과목까지 되어야 하며, 원하는 출력도 기대할 수 없다.
3) 
SELECT 이름,
    SUM(CASE WHEN 과목 = 영어 THEN 점수 ELSE 0 END) AS 영어,
    SUM(CASE WHEN 과목 = 수학 THEN 점수 ELSE 0 END) AS 수학,
    AVG(점수) AS 평균
FROM A
GROUP BY 이름

=> 정답. 이것 저것 생각해보다가 문득 excel의 sum if 함수를 생각해보며 풀었다. 2)과 유사하지만 결과는 명백히 다르다.

생각하고, 또 생각하자.
그래서 효율적인 쿼리를 만들어 내도록 연구해보자!!! 오늘의 교훈이다.

댓글 없음:

댓글 쓰기