노력에는 지름길이 없으니까요

프로그래머스 - 우유와 요거트가 담긴 장바구니 본문

SQL/프로그래머스

프로그래머스 - 우유와 요거트가 담긴 장바구니

데건 2024. 7. 16. 14:25
728x90

 

해결일 언어 레벨 테스트명
20240716 SQL level 4  우유와 요거트가 담긴 장바구니

 

링크 : https://school.programmers.co.kr/learn/courses/30/lessons/62284

 

 

 


 

내 코드

SELECT
    CART_ID
FROM CART_PRODUCTS
WHERE NAME ='Yogurt'
INTERSECT
SELECT
    CART_ID
FROM CART_PRODUCTS
WHERE NAME = 'Milk'

 

교집합을 구하면 될 것 같아서 조사를 해보니

집합 관련 명령문이 있기에 정리해두었다.

 

 

SQL 일반 집합 연산

합집합 : UNION

SELECT * FROM (테이블1)
UNION
SELECT * FROM (테이블2);

 

교집합 : INTERSECT

-- 선택한 컬럼에 대해서만 교집합 연산 진행
SELECT COL1, COL2 FROM A
INTERSECT
SELECT COL1, COL2 FROM B

 

차집합 : EXCEPT

-- 선택한 컬럼에 대해서만 차집합 연산 진행
-- A와 B의 COL1, COL2 값이 모두 같은 경우에만 차집합 진행
SELECT COL1, COL2 FROM A
EXCEPT  -- Oracle에서는 MINUS
SELECT COL1, COL2 FROM B

 

베스트 코드

SELECT CART_ID
FROM CART_PRODUCTS
WHERE NAME IN ('Milk', 'Yogurt')
GROUP BY CART_ID
HAVING COUNT(DISTINCT NAME) = 2
ORDER BY CART_ID;

 

 

공유된 정답 중 현시점에서 다들 가장 직관적이라고 하는 코드다.

이걸 보고 감탄해서 다시 써보고 싶었는데 잘되지 않아서 교집합을 차용했던 거라... ㅋㅋㅋ

다시 읽어둬야지

 

 

728x90
반응형