https://school.programmers.co.kr/learn/courses/30/lessons/133025
코드설명
SELECT + INNER JOIN 를 활용하는 문제입니다.
- FIRST_HALF와 ICECREAM_INFO 테이블을 INNER JOIN을 사용하여 "FLAVOR"를 기준으로 연결합니다.
- INNER JOIN된 결과에서 FIRST_HALF 테이블의 "TOTAL_ORDER"가 3000보다 크고, ICECREAM_INFO 테이블의 "INGREDIENT_TYPE"이 'fruit_based'인 행만 선택합니다.
- 선택된 행에서 "FH.FLAVOR"를 추출하여 출력합니다.
- 마지막으로, ORDER BY 절을 사용하여 "FH.TOTAL_ORDER"를 내림차순으로 정렬합니다.
코드
SELECT FH.FLAVOR
FROM FIRST_HALF AS FH
INNER JOIN ICECREAM_INFO AS II
ON FH.FLAVOR = II.FLAVOR
WHERE FH.TOTAL_ORDER > 3000 AND II.INGREDIENT_TYPE = 'fruit_based'
ORDER BY FH.TOTAL_ORDER DESC
SELECT FH1.FLAVOR
FROM FIRST_HALF AS FH1
INNER JOIN ICECREAM_INFO AS II1
ON FH1.FLAVOR = II1.FLAVOR
WHERE TOTAL_ORDER >= 3000 AND II1.INGREDIENT_TYPE = 'fruit_based'
ORDER BY TOTAL_ORDER DESC
혹은 INNER JOIN에 SUBQUERY를 포함해서 작동시킵니다.
이 방식은, 미리 'FRUIT_BASED'인 테이블만 조인시켜서 조인하는 데이터를 줄일 수 있습니다.
하지만, 성능효과 차이는 실제로 테스트해봐야 알 것 같습니다.
SELECT FH1.FLAVOR
FROM FIRST_HALF AS FH1
INNER JOIN (
SELECT FLAVOR FROM ICECREAM_INFO WHERE INGREDIENT_TYPE = 'fruit_based'
) AS II1
ON FH1.FLAVOR = II1.FLAVOR
WHERE FH1.TOTAL_ORDER >= 3000
ORDER BY FH1.TOTAL_ORDER DESC;
SELECT
II.FLAVOR
FROM
ICECREAM_INFO AS II
INNER JOIN
FIRST_HALF AS FH
ON II.FLAVOR = FH.FLAVOR
WHERE II.INGREDIENT_TYPE = 'fruit_based' -- 그룹화 전에 먼저 WHERE절로 데이터 필터링
GROUP BY(II.FLAVOR)
HAVING SUM(FH.TOTAL_ORDER) > 3000
ORDER BY SUM(FH.TOTAL_ORDER) DESC;
'SQL > 프로그래머스' 카테고리의 다른 글
[SQL][프로그래머스] 모든 레코드 조회하기 - SELECT MYSQL (0) | 2023.12.12 |
---|---|
[SQL][프로그래머스] 강원도에 위치한 생산공장 목록 출력하기 - SELECT + LIKE MYSQL (0) | 2023.12.12 |
[SQL][프로그래머스] 조건에 부합하는 중고거래 댓글 조회하기 - SELECT + INNER JOIN + DATE_FORMAT MYSQL (0) | 2023.12.12 |
[SQL][프로그래머스] 인기있는 아이스크림 - SELECT MYSQL (0) | 2023.12.12 |
[SQL][프로그래머스] 조건에 맞는 도서 리스트 출력하기 - SELECT + YEAR(DATE) + DATE_FORMAT MYSQL (0) | 2023.12.12 |