프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
링크를 클릭하면 해당 문제로 이동합니다.
1. 접근하기
문제를 보자마자 SELF JOIN을 이용해서 풀어봐야겠다 라는 생각이 들었다.
우유가 든 장바구니 테이블과 요거트가 든 장바구니 테이블을 JOIN해서 둘의 CART_ID는 같다 라는 조건을 주면 되겠다.
2. 풀이
SELECT DISTINCT A.CART_ID
FROM CART_PRODUCTS A, ( SELECT CART_ID
FROM CART_PRODUCTS
WHERE NAME = 'Yogurt') B
WHERE A.CART_ID = B.CART_ID
AND A.NAME = 'Milk'
ORDER BY 1;
프로그래머스에서 SQL문제를 풀 때, SELF JOIN을 이용해본적은 이번 문제가 처음이라
SELF JOIN 사용법에 대한 기억이 가물가물 했는데 막상 쿼리를 짜보니 원하던 결과가 출력 되었다.
근데 쿼리를 다 작성하고보니 꼭 SELF JOIN만이 답은 아니었던거 같아서
GROUP BY와 WHERE 절의 서브쿼리를 이용해서 한번 더 풀어 보았다.
SELECT CART_ID
FROM CART_PRODUCTS
WHERE NAME = 'Milk', CART_ID IN (SELECT CART_ID
FROM CART_PRODUCTS
WHERE NAME = 'Yogurt')
GROUP BY CART_ID
ORDER BY 1;
이렇게 쿼리를 작성해도 원하던 결과가 잘 나오는 것을 확인할 수 있다.
둘 중 어떤게 더 효율적인 쿼리인지는 솔직히 잘 모르겠다.
데이터가 몇 십만개라고 가정한다면, 조인보다는 서브쿼리를 사용한 아래의 쿼리가 더 효율적이지 않을까?
라고 감히 예상해본다,,,
'데이터베이스 > MYSQL' 카테고리의 다른 글
[MYSQL] 그룹별 조건에 맞는 식당 목록 출력하기 (1) | 2023.01.08 |
---|---|
[MYSQL] 오랜 기간 보호한 동물(2) (0) | 2023.01.08 |
[MYSQL] 가격대 별 상품 개수 구하기 (1) | 2023.01.07 |
[MYSQL] 식품분류별 가장 비싼 식품의 정보 조회하기 (0) | 2023.01.07 |
[MYSQL] 성분으로 구분한 아이스크림 총 주문량 (0) | 2023.01.05 |
댓글