반응형
풀이 (MySQL)
가장 가격이 비싼 항목을 하나 출력해야 한다.
다양한 풀이 방법이 있다. 정렬을 이용하여 가격 내림차순의 첫 번째 것을 고르는 것, 서브쿼리나 조인을 이용하는 것 등... 필자는 처음에 서브쿼리로 풀이했다.
SUB QUERY
SELECT
PRODUCT_ID
, PRODUCT_NAME
, PRODUCT_CD
, CATEGORY
, PRICE
FROM
FOOD_PRODUCT
WHERE
PRICE = (
SELECT
MAX(PRICE)
FROM
FOOD_PRODUCT
)
위의 풀이도 정답이지만, 매 행마다 WHERE절의 서브쿼리를 반복해야 하는 형태이므로 성능에는 좋지 않다고 한다. DB에 따라서 어느 정도 해소하는 솔루션을 가지고 있다고 하긴 하지만, 더 나은 형태를 고려해 볼 필요가 있다고 느꼈다.
INNER JOIN
SELECT
p.PRODUCT_ID
, p.PRODUCT_NAME
, p.PRODUCT_CD
, p.CATEGORY
, p.PRICE
FROM
FOOD_PRODUCT AS p
JOIN (
SELECT
MAX(PRICE) AS MAX_PRICE
FROM
FOOD_PRODUCT
) max_price
ON p.PRICE = max_price.MAX_PRICE;
위 코드는 서브쿼리의 결과값을 조인을 이용하여 연결한 방식이다. 이렇게 하면 불필요한 연산을 줄이고, 최대값만 비교하여 이전보다 연산을 많이 줄일 수 있다.
ORDER BY
SELECT
PRODUCT_ID
, PRODUCT_NAME
, PRODUCT_CD
, CATEGORY
, PRICE
FROM
FOOD_PRODUCT
ORDER BY PRICE DESC
LIMIT 1;
내림차순 정렬을 활용한 풀이법으로, 정렬에는 약간의 시간이 소요되겠지만 WHERE절에 서브쿼리를 넣는 것보다는 더 나은 방식이며, 코드가 깔끔하다는 장점이 있다.
SET
SET @max_price := (SELECT MAX(price) FROM FOOD_PRODUCT);
SELECT
PRODUCT_ID
, PRODUCT_NAME
, PRODUCT_CD
, CATEGORY
, PRICE
FROM
FOOD_PRODUCT
WHERE
PRICE = @max_price
위 코드는 MySQL에서 제공하는 변수 기능을 활용한 코드이다. SET을 이용하면 위와 같이 변수를 만들어 활용할 수 있으므로, 유연하게 대처가 가능하다.
반응형
'SQL 쿼리 연습 > SUM, MAX, MIN' 카테고리의 다른 글
[Lv.2 / 프로그래머스 / SQL] 연도별 대장균 크기의 편차 구하기 (0) | 2024.04.30 |
---|---|
[Lv.2 / 프로그래머스 / SQL] 조건에 맞는 아이템들의 가격의 총합 구하기 (0) | 2024.03.19 |
[Lv.2 / 프로그래머스 / SQL] 중복 제거하기 (0) | 2023.03.23 |
[Lv.1 / 프로그래머스 / SQL] 최댓값 구하기 (0) | 2023.03.13 |
[Lv.2 / 프로그래머스 / SQL] 최솟값 구하기 (0) | 2023.02.12 |