inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[백문이불여일타] 데이터 분석을 위한 중급 SQL

CASE를 활용한 테이블 피봇 리트코드 문제풀이(난이도 상)

LEETCODE CASE 문제 질문

372

David Lee

작성한 질문수 20

0

SELECT id
       , SUM(CASE WHEN month = 'JAN' THEN revenue ELSE NULL END AS Jan_Revenue)
       , SUM(CASE WHEN month = 'FEB' THEN revenue ELSE NULL END AS Feb_Revenue)
       , SUM(CASE WHEN month = 'MAR' THEN revenue ELSE NULL END AS Mar_Revenue)
       , SUM(CASE WHEN month = 'APR' THEN revenue ELSE NULL END AS Apr_Revenue)
       , SUM(CASE WHEN month = 'MAY' THEN revenue ELSE NULL END AS May_Revenue)
       , SUM(CASE WHEN month = 'JUN' THEN revenue ELSE NULL END AS Jun_Revenue)
       , SUM(CASE WHEN month = 'JUL' THEN revenue ELSE NULL END AS Jul_Revenue)
       , SUM(CASE WHEN month = 'AUG' THEN revenue ELSE NULL END AS Aug_Revenue)
       , SUM(CASE WHEN month = 'SEP' THEN revenue ELSE NULL END AS Sep_Revenue)
       , SUM(CASE WHEN month = 'OCT' THEN revenue ELSE NULL END AS Oct_Revenue)
       , SUM(CASE WHEN month = 'NOV' THEN revenue ELSE NULL END AS Nov_Revenue)
       , SUM(CASE WHEN month = 'DEC' THEN revenue ELSE NULL END AS Dec_Revenue)
FROM department
GROUP BY id 

해당 코드에 대해서 이해가 안가는 부분이 있어서 문의 드립니다.

SELECT ID

SUM(CASE WHEN MONTH = 'JAN' THEN REVENUE

WHEN MONTH = 'FEB' THEN REVENUE

WHEN MONTH = 'MAR' THEN REVENUE

ELSE NULL

END

이런 식으로 생각을 했는데요.

AS가 REVENUE 뒤에 각각 들어갈 수 있는지와

이런 식으로 할 경우 어떤 부분에서 오류가 있는지 여쭤봅니다!

 

 

sql

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴이에요.

쿼리 코드를 보면, department 테이블에서 id와 month, revenue라는 열을 사용하여 id별로 월별 수익을 계산하고 있습니다.

쿼리의 CASE 문은 각 월에 해당하는 revenue를 선택적으로 합산하고 해당 월이 아닌 경우에는 NULL 값을 반환하도록 작성되어 있습니다. AS 키워드는 각 합계 열의 이름을 정의하는 데 사용됩니다.

하지만, 해당 쿼리에서 AS 키워드는 잘못 사용되었습니다. AS 키워드는 열 별칭을 정의하는 데 사용되며, 월별 수익을 구분하기 위해 열 별칭을 부여하는 것은 적절하지 않습니다.

올바른 코드는 다음과 같이 작성될 겁니다.

SELECT id,
SUM(CASE WHEN month = ‘JAN’ THEN revenue ELSE NULL END) AS Jan_Revenue,
SUM(CASE WHEN month = ‘FEB’ THEN revenue ELSE NULL END) AS Feb_Revenue,
SUM(CASE WHEN month = ‘MAR’ THEN revenue ELSE NULL END) AS Mar_Revenue,
SUM(CASE WHEN month = ‘APR’ THEN revenue ELSE NULL END) AS Apr_Revenue,
SUM(CASE WHEN month = ‘MAY’ THEN revenue ELSE NULL END) AS May_Revenue,
SUM(CASE WHEN month = ‘JUN’ THEN revenue ELSE NULL END) AS Jun_Revenue,
SUM(CASE WHEN month = ‘JUL’ THEN revenue ELSE NULL END) AS Jul_Revenue,
SUM(CASE WHEN month = ‘AUG’ THEN revenue ELSE NULL END) AS Aug_Revenue,
SUM(CASE WHEN month = ‘SEP’ THEN revenue ELSE NULL END) AS Sep_Revenue,
SUM(CASE WHEN month = ‘OCT’ THEN revenue ELSE NULL END) AS Oct_Revenue,
SUM(CASE WHEN month = ‘NOV’ THEN revenue ELSE NULL END) AS Nov_Revenue,
SUM(CASE WHEN month = ‘DEC’ THEN revenue ELSE NULL END) AS Dec_Revenue
FROM department
GROUP BY id

위의 코드를 사용하면 각 월별 수익이 올바르게 합산됩니다.

더 궁금한 점이 있으시면 언제든지 물어보세요. 좋은 하루 되세요!

리트코드 1280. Students and Examinations

0

75

3

16강 LEFT JOIN 리트코드 (183. Customers Who Never Order) 관련 질문

0

89

2

African Cities 문제관련 질문

0

54

1

SQL 코딩테스트 질문

0

206

1

HACKER RANK에서 문제찾기

0

98

2

강의 자료 다운로드

0

90

2

Asian population 문제가 없어요

0

77

2

INNER JOIN 에서 A.키 쓸때 빨간 색 나오고 'dause'

0

68

2

별칭 관련해서 질문 있습니다.

0

79

2

rising temperature 문제 질문

0

98

2

해커랭크 TOP EARNERS 문제 질문

0

99

1

ON 뒤에 질문

0

95

2

INNER JOIN 질문. 강의와 결과값이 다릅니다.

0

196

3

END, 뒤에 * 붙이면 에러가 뜹니다

1

204

2

CustomerID가 중복되서 나타나요

0

234

3

별칭이 전체 테이블을 못 불러와요.

0

144

2

CASE WHEN 쿼리 오류 문의

1

325

3

CASE문제풀이 질문

0

125

1

Customers Who Never Order 풀다가 Alias관련 질문사항

0

138

1

Average Population 질문

0

130

1

Revising Aggregations - The Count Function 질문

0

104

1

Average Population of Each Continent 에대해서 질문

0

193

3

w3schools 에서 쿼리 작성 질문

0

159

1

INNER JOIN 할 때 NULL 값이 안보일 수도 있나요?

0

329

1