728x90
https://school.programmers.co.kr/learn/courses/30/lessons/62284
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
하나의 테이블이지만 인라인뷰를 두개 만들어 조인하면 풀 수 있다.
하지만 이것은 비효율적인 풀이이고 정해는 IN을 사용해야하는 것으로 생각된다.
1번 Join 풀이
-- 코드를 입력하세요
SELECT DISTINCT (y.CART_ID)
FROM (
SELECT CART_ID, NAME
FROM CART_PRODUCTS
WHERE NAME = 'Yogurt'
) y
,
(
SELECT CART_ID, NAME
FROM CART_PRODUCTS
WHERE NAME = 'Milk'
) m
WHERE y.CART_ID = m.CART_ID
ORDER BY y.CART_ID;
다른 사람이 보면 보기 힘들고 뭔가 쓰면서도 찝찝하다.
SELECT CART_ID
FROM CART_PRODUCTS
WHERE NAME IN('Yogurt', 'Milk')
GROUP BY CART_ID
HAVING COUNT(DISTINCT NAME) = 2
ORDER BY CART_ID;
간결하고 보기도편하다. 이게 정답인듯. 실무에서도 이렇게 짤 수 있어야한다.
그룹바이를 꼭 해야하는 이유는 만약 요거트만 3개를 산 사람이라면 요거트만 샀기 때문에 DISTINCT하여 카운팅해서 걸러줘야한다.
IN 함수는 OR와 같은 역할을 한다. 한번에 여러개를 체크하고 싶을 때 사용한다.
'프로그래머스 풀이 > Lv 4' 카테고리의 다른 글
[프로그래머스 SQL] 주문량이 많은 아이스크림들 조회하기 (ORACLE) (0) | 2025.03.06 |
---|---|
[프로그래머스 SQL] 년 월 성별 별 상품 구매 회원 수 구하기 ORACLE (0) | 2025.03.04 |
[프로그래머스 SQL] 저자 별 카테고리 별 매출액 집계하기 (ORACLE) (0) | 2025.03.03 |
[프로그래머스 SQL] 서울에 위치한 식당 목록 출력하기(ORACLE) (0) | 2025.03.03 |
[프로그래머스 SQL] 5월 식품들의 총매출 조회하기 [ORACLE] (0) | 2025.01.25 |