DB/SQL

[SQL]가격이 제일 비싼 식품의 정보 출력하기 - SQL 고득점 Kit

나맘임 2025. 2. 13. 13:39

문제

코딩테스트 연습 - 가격이 제일 비싼 식품의 정보 출력하기 | 프로그래머스 스쿨

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

풀이

SELECT
    PRODUCT_ID,
    PRODUCT_NAME,
    PRODUCT_CD,
    CATEGORY,
    PRICE
FROM FOOD_PRODUCT
WHERE PRICE = (SELECT MAX(PRICE) FROM FOOD_PRODUCT);

서브 쿼리를 사용하면 쉽게 풀 수 있는 문제입니다.

 

WHERE PRICE = (SELECT MAX(PRICE) FROM FOOD_PRODUCT)

먼저 MAX 함수를 이용해 최대값을 찾아둡니다.

WHERE 절에서 그 값과 같은 걸 찾아서 SELECT를 해주면 끝입니다.

 

서브 쿼리 사용 방식

서브쿼리는 보통 다음과 같은 위치에서 사용됩니다

  1. SELECT 절
    • 데이터를 계산하거나, 비교하기 위한 추가 값을 반환할 때 사용.
  2. FROM 절
    • 테이블처럼 사용되어 결과를 기반으로 새로운 데이터 집합을 생성.
  3. WHERE 절
    • 특정 조건을 필터링하기 위해 값을 반환.
  4. HAVING 절
    • 그룹화된 데이터에 조건을 적용.

 

1. SELECT 절에서 서브쿼리

SELECT 
    PRODUCT_ID, 
    PRODUCT_NAME, 
    PRICE, 
    (SELECT AVG(PRICE) FROM FOOD_PRODUCT) AS AVG_PRICE
FROM FOOD_PRODUCT;

추가 계산 결과를 컬럼으로 가져옵니다.

 

2. FROM 절에서 서브쿼리 

SELECT E.DEPARTMENT_ID, E.EMPLOYEE_ID, E.SALARY
FROM EMPLOYEES E
JOIN (
    SELECT DEPARTMENT_ID, MAX(SALARY) AS MAX_SALARY
    FROM EMPLOYEES
    GROUP BY DEPARTMENT_ID
) T
ON E.DEPARTMENT_ID = T.DEPARTMENT_ID AND E.SALARY = T.MAX_SALARY;

서브쿼리를 테이블처럼 사용하여 중간 결과를 생성하여 사용합니다.

 

3. WHERE 절에서 서브쿼리

SELECT PRODUCT_ID, PRODUCT_NAME, PRICE
FROM FOOD_PRODUCT
WHERE PRICE = (SELECT MAX(PRICE) FROM FOOD_PRODUCT);

문제에서 나왔던 방식으로 가장 일반적으로 사용됩니다.

 

4. HAVING 절에서 서브쿼리

SELECT DEPARTMENT_ID, COUNT(*) AS EMP_COUNT
FROM EMPLOYEES
GROUP BY DEPARTMENT_ID
HAVING COUNT(*) >= (SELECT AVG(COUNT(*)) FROM EMPLOYEES GROUP BY DEPARTMENT_ID);

 

그룹화된 데이터에 조건을 적용하는데 사용됩니다.