[프로그래머스 Level.3] 물고기 종류 별 대어 찾기

오형상·2024년 4월 20일
0

프로그래머스_SQL

목록 보기
2/12
post-thumbnail

문제 링크

물고기 종류 별 대어 찾기

소스코드

SELECT
    ID,
    FISH_NAME,
    LENGTH
FROM
    FISH_INFO AS FI
JOIN
    FISH_NAME_INFO AS FNI
USING(FISH_TYPE)
WHERE FISH_TYPE IN 
(
    SELECT FISH_TYPE
    FROM FISH_INFO
    GROUP BY FISH_TYPE
    HAVING LENGTH = MAX(LENGTH)
)
ORDER BY ID

배운점

IN 연산자와 서브쿼리

IN 연산자는 WHERE 절에서 사용되며, 여러 값을 비교할 때 특히 유용합니다. 서브쿼리는 주 쿼리 내에서 다른 쿼리를 실행하는 것으로, 서브쿼리의 결과를 주 쿼리에서 사용할 수 있습니다.

📌 사용법

SELECT column_name(s)
FROM table_name
WHERE column_name IN (subquery);
  • column_name(s): 조회하고자 하는 열의 이름입니다.
  • table_name: 조회할 테이블의 이름입니다.
  • subquery: 서브쿼리로, 주 쿼리 내에서 실행될 쿼리입니다.

📌 예시

SELECT *
FROM orders
WHERE customer_id IN (SELECT customer_id FROM customers WHERE country = 'USA');

위 쿼리는 'USA'에 거주하는 고객들의 주문만을 조회합니다. 이때, 서브쿼리는 'USA'에 거주하는 고객들의 customer_id를 반환합니다.

SELECT *
FROM orders
WHERE (customer_id, order_date) IN (SELECT customer_id, MAX(order_date) FROM orders GROUP BY customer_id);

서브쿼리는 orders 테이블에서 각 고객별로 가장 최근의 주문일을 찾아서 그룹화합니다. 이 서브쿼리는 customer_id를 그룹화한 후, 각 그룹의 최대(MAX) order_date를 반환합니다. 즉, 각 고객의 가장 최근 주문일을 찾습니다.

메인 쿼리는 orders 테이블에서 모든 열을 선택하는데, 이때 서브쿼리의 결과와 일치하는 주문을 선택합니다. 이 일치 여부는 주문의 customer_id와 order_date가 서브쿼리의 결과와 동일한지를 기준으로 합니다. 즉, 각 고객의 가장 최근 주문일과 동일한 주문을 선택합니다.

따라서 이 쿼리는 각 고객의 최신 주문에 해당하는 행들을 반환합니다.

📌주의사항

  • 서브쿼리가 주 쿼리보다 먼저 실행됩니다.
  • 서브쿼리는 괄호로 둘러싸여야 합니다.
  • 서브쿼리에서 반환되는 열의 수는 주 쿼리에서 비교 대상이 되는 열의 수와 일치해야 합니다.

0개의 댓글