알고리즘 문제 풀이/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를 해주면 끝입니다.
서브 쿼리 사용 방식
서브쿼리는 보통 다음과 같은 위치에서 사용됩니다
- SELECT 절
- 데이터를 계산하거나, 비교하기 위한 추가 값을 반환할 때 사용.
- FROM 절
- 테이블처럼 사용되어 결과를 기반으로 새로운 데이터 집합을 생성.
- WHERE 절
- 특정 조건을 필터링하기 위해 값을 반환.
- 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);
그룹화된 데이터에 조건을 적용하는데 사용됩니다.