https://school.programmers.co.kr/learn/courses/30/lessons/133025

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

코드설명

SELECT + INNER JOIN 를 활용하는 문제입니다.

 

  1. FIRST_HALF와 ICECREAM_INFO 테이블을 INNER JOIN을 사용하여 "FLAVOR"를 기준으로 연결합니다.
  2. INNER JOIN된 결과에서 FIRST_HALF 테이블의 "TOTAL_ORDER"가 3000보다 크고, ICECREAM_INFO 테이블의 "INGREDIENT_TYPE"이 'fruit_based'인 행만 선택합니다.
  3. 선택된 행에서 "FH.FLAVOR"를 추출하여 출력합니다.
  4. 마지막으로, 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;

+ Recent posts