:< [프로그래머스 SQL] 물고기 종류 별 대어 찾기

kiki·2024년 4월 5일
0

프로그래머스

목록 보기
74/78

문제 링크

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

문제 간단 설명

물고기 종류 별 가장 큰 사이즈의 물고기의 ID, FISH_NAME, LENGTH을 조회

쿼리 (WHERE 사용)

SELECT ID, FISH_NAME, LENGTH
FROM FISH_INFO
JOIN FISH_NAME_INFO USING(FISH_TYPE)
WHERE (FISH_TYPE, LENGTH) IN (SELECT FISH_TYPE, MAX(LENGTH) FROM FISH_INFO GROUP BY 1)
ORDER BY 1;
  1. 물고기 종류 별 가장 큰 사이즈를 조회하는 서브쿼리
  2. (FISH_TYPE, LENGTH)을 묶어 이를 포함하는 데이터만 조회

다른 쿼리 (JOIN 사용)

WITH MAX_LENGTH AS(
    SELECT FISH_TYPE, MAX(LENGTH) M_LENGTH
    FROM FISH_INFO 
    GROUP BY 1
)

SELECT ID, FISH_NAME, LENGTH
FROM FISH_INFO I
JOIN FISH_NAME_INFO N USING(FISH_TYPE)
JOIN MAX_LENGTH M ON M.FISH_TYPE = I.FISH_TYPE 
                AND M.M_LENGTH = I.LENGTH
ORDER BY 1;
  1. 물고기 종류 별 가장 큰 사이즈를 조회하는 WITH문 작성
  2. CTE(Common Table Expressions)를 통해 정의한 MAX_LENGTH 테이블을 JOIN해 피쉬타입과 길이가 동시에 동일한 데이터만 조회 (INNER JOIN)

깨달은 것

  • IN을 사용할 때 두 컬럼을 튜플로 묶어 함께 포함되는 데이터를 걸러낼 수 있다.
  • WITH문(CTE)으로 작성하고 해당 테이블을 INNER JOIN 해 원하는 조건의 데이터만 조회할 수 있다.

궁금한 것

WITH MAX_LENGTH AS (
	SELECT FISH_TYPE, MAX(LENGTH) 
    FROM FISH_INFO 
    GROUP BY 1
)

SELECT ID, FISH_NAME, LENGTH
FROM FISH_INFO
JOIN FISH_NAME_INFO USING(FISH_TYPE)
WHERE (FISH_TYPE, LENGTH) IN MAX_LENGTH
ORDER BY 1;
  • IN의 우측엔 테이블이 올 수 없다.. IN의 우측에 MAX_LENGTH가 오는 것과, 서브쿼리로 FROM MAX_LENGTH의 데이터를 전부 가져오는 것이랑 뭐가 다른가?

0개의 댓글