IN, 서브쿼리, GROUP BY 이용
FOOD_PRODUCT 테이블에서 특정 카테고리의 제품 중 가장 높은 가격을 가진 제품에 대한 정보를 검색하도록 함
WHERE (컬럼1, 컬럼2) IN // 서브쿼리에서 반환된 결과와 매칭되는 행 선택
(
SELECT 컬럼1, MAX(컬럼2) // 각 카테고리별로 최대 가격을 찾는 서브쿼리
FROM 테이블명
GROUP BY 컬럼1
HAVING 컬럼1 IN ('컬럼1의 값1', '컬럼1의 값2', '컬럼1의 값3', ...) // CATEGORY가 '과자', '국', '김치', '식용유' 중 하나인 카테고리만을 대상으로 함
)
=> 필터링 조건을 지정
GROUP BY 컬럼1: 결과를 컬럼1 열을 기준으로 그룹화
ㄴ 이는 서브쿼리에서 각 컬럼1 별 최대값을 찾기 위해 사용됨
=> '컬럼1의 값1', '컬럼1의 값2', '컬럼1의 값3', ... 중 각 컬럼1 별로 최대값을 가진 제품의 정보를 검색하고, 그 결과를 최대값을 기준으로 내림차순으로 정렬하여 반환
https://school.programmers.co.kr/learn/courses/30/lessons/131116
SELECT CATEGORY, PRICE AS MAX_PRICE, PRODUCT_NAME
FROM FOOD_PRODUCT
WHERE (CATEGORY, PRICE) IN (SELECT CATEGORY, MAX(PRICE)
FROM FOOD_PRODUCT
GROUP BY CATEGORY
HAVING CATEGORY IN ('과자', '국', '김치', '식용유'))
ORDER BY PRICE DESC;
아래와 같이 PRICE 대신 2 라고 하여 2번째 검색 값으로 정렬한다고 하여 ORDER BY 2 를 이용할 수도 있음
SELECT CATEGORY, PRICE AS MAX_PRICE, PRODUCT_NAME
FROM FOOD_PRODUCT
WHERE (CATEGORY, PRICE) IN (SELECT CATEGORY, MAX(PRICE)
FROM FOOD_PRODUCT
GROUP BY CATEGORY
HAVING CATEGORY IN ('과자', '국', '김치', '식용유'))
ORDER BY 2 DESC;
'코딩테스트 > programming_SQL' 카테고리의 다른 글
[SQL] 취소되지 않은 진료 예약 조회하기_132204 (0) | 2023.11.17 |
---|---|
[SQL] 5월 식품들의 총매출 조회하기_131117 (1) | 2023.11.17 |
[SQL] 보호소에서 중성화한 동물_59045 (1) | 2023.11.17 |
[SQL] 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기_151139 (0) | 2023.11.12 |
[SQL] 조회수가 가장 많은 중고거래 게시판의 첨부파일 조회하기_164671 (0) | 2023.10.31 |