테이블 정보
문제
데이터 분석 팀에서는 우유(Milk)와 요거트(Yogurt)를 동시에 구입한 장바구니가 있는지 알아보려 합니다. 우유와 요거트를 동시에 구입한 장바구니의 아이디를 조회하는 SQL 문을 작성해주세요. 이때 결과는 장바구니의 아이디 순으로 나와야 합니다.
결과 예시
정답 코드 1 (MySQL)
SELECT CART_ID
FROM CART_PRODUCTS
WHERE NAME IN ('Milk', 'Yogurt')
GROUP BY CART_ID
HAVING COUNT(DISTINCT NAME) >= 2
ORDER BY CART_ID ASC;
문제 풀이 1
Level 4라고 하기에는 생각보다 문제가 쉽게 풀렸다.
나만 그렇게 느낀 게 아닌 건지 정답률이 70%나 된다...
위 코드는 상품 이름이 'Milk'와 'Yogurt' 둘 다를 포함하는 CART_ID만 선택하도록 HAVING 조건을 주어,
그룹화하여 중복을 제거하였다.
정답 코드 2 (MySQL)
WITH CART AS (
SELECT CART_ID
, COUNT(CASE WHEN NAME = 'Milk' THEN 1 END) as milk_count
, COUNT(CASE WHEN NAME = 'Yogurt' THEN 1 END) as yogurt_count
FROM CART_PRODUCTS
WHERE NAME IN ('Milk', 'Yogurt')
GROUP BY CART_ID
)
SELECT CART_ID
FROM CART
WHERE milk_count >= 1 AND yogurt_count >= 1
ORDER BY CART_ID ASC;
문제 풀이 2
다른 분들의 풀이를 구경하면서 흥미로웠던 코드를 추가해 보았다.
WITH 절로 따로 빼서 COUNT() 안에 CASE WHEN을 활용한 풀이였는데
이 문제가 아니더라도 다른 문제에서 이러한 함수들을 활용하여 풀이하면 유용할 거 같았다.
https://www.w3schools.com/sql/func_mysql_case.asp
MySQL CASE Function
W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more.
www.w3schools.com
'SQL 문제 풀이' 카테고리의 다른 글
[LeetCode Hard] 262. Trips and Users (0) | 2024.02.28 |
---|---|
[프로그래머스 Level 4] 자동차 대여 기록 별 대여 금액 구하기 (0) | 2024.02.14 |
[LeetCode Hard] 601. Human Traffic of Stadium (0) | 2024.01.16 |
[LeetCode Medium] 1341. Movie Rating (0) | 2024.01.12 |
[LeetCode Hard] 185. Department Top Three Salaries (2) | 2024.01.07 |