Notice
Recent Posts
Recent Comments
Link
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
관리 메뉴

Seongho Jang

CASE WHEN의 활용 (Salaries Difference, 가구 판매의 비중이 높았던 날 찾기) 본문

SQL

CASE WHEN의 활용 (Salaries Difference, 가구 판매의 비중이 높았던 날 찾기)

seonghojang 2024. 1. 22. 16:05

CASE WHEN 구문은

SELECT CASE WHEN condition = 'AAA' THEN 1
            WHEN condition = 'BBB' THEN 2
            ELSE 3
            END AS cond1

 

와 같이 분류 용도로 쓰는 것은 알고 있었지만

아래 두 개 문제에서도 유용하게 사용될 수 있어서 기록차 적어놓는다.

 

1. Salaries Difference

 

 

StrataScratch - Salaries Differences

 

platform.stratascratch.com

Write a query that calculates the difference between the highest salaries found in the marketing and engineering departments. Output just the absolute difference in salaries.

 

 

SELECT ABS(MAX(CASE WHEN d.department = 'marketing' THEN e.salary END) -
           MAX(CASE WHEN d.department = 'engineering' THEN e.salary END))
FROM db_employee e
INNER JOIN db_dept d
ON e.department_id = d.id

 

CASE WHEN department = 'marketing' THEN salary END를 계산하면,

department가 marketing인 케이스의 salary만 출력되고, 나머지는 NULL로 출력된다.

이렇게 되면 굳이 CTE를 사용하지 않거나 UNION 등을 쓰지 않아도 간결하게 쿼리를 쓸 수 있다.

 

 

2. 가구 판매의 비중이 높았던 날 찾기

 

 

https://solvesql.com/problems/day-of-furniture/

 

solvesql.com

 

SELECT order_date,
      COUNT(DISTINCT CASE WHEN category = 'Furniture' THEN order_id END) as furniture,
      ROUND(COUNT(DISTINCT CASE WHEN category = 'Furniture' THEN order_id END) /
            (COUNT(DISTINCT order_id) + 0.00) * 100, 2) as furniture_pct
      
FROM records
GROUP BY order_date
HAVING COUNT(DISTINCT order_id) >= 10 AND furniture_pct >= 40
ORDER BY 3 DESC, 1;

 

이 문제의 경우에도 CASE WHEN category = 'Furniture' THEN order_id END를 계산하면

category가 Furniture인 경우에만 order_id가 나오고, 나머지는 NULL로 출력된다. 

 

각 order_id에 세부 주문 사항이 많기 때문에 CASE WHEN 앞에 DISTINCT까지 걸어서 비율을 구했다.

생각보다 여러가지로 신경써야 할 것이 많았던 문제..

'SQL' 카테고리의 다른 글

[프로그래머스] 연도별 대장균 크기의 편차 구하기  (0) 2024.04.17
Leetcode 1280. Students and Examinations  (0) 2024.03.02
서브쿼리  (0) 2024.01.18
[Hackerrrank] The PADS  (0) 2024.01.17
SQL 쿼리 작성 순서  (0) 2024.01.17