문제풀이
SELECT
CATEGORY,
PRICE AS MAX_PRICE,
PRODUCT_NAME
FROM FOOD_PRODUCT
WHERE (CATEGORY,PRICE) IN (
SELECT
CATEGORY,
MAX(PRICE) AS MAX_PRICE
FROM FOOD_PRODUCT
WHERE CATEGORY IN ('과자','국', '김치', '식용유')
GROUP BY CATEGORY )
ORDER BY 2 DESC
문제 - Level 3
FOOD_PRODUCT 테이블에서 식품분류별로 가격이 제일 비싼 식품의 분류, 가격, 이름을 조회하는 SQL문을 작성해주세요.
이때 식품분류가 '과자', '국', '김치', '식용유'인 경우만 출력시켜 주시고 결과는 식품 가격을 기준으로 내림차순 정렬해주세요.
설명
레벨 3여서 쉽게 생각하고 접근한 문제였지만 계속되는 오답에 짜증났던 문제!! 어려운 문제는 아니지만, 정답에 접근하는 방식과 MAX 함수에 대한 새로운(?) 지식에 대해서 알게 되어서 너무 대충 공부한게 티가 났던 문제였다. 이 문제를 푸는 방법은 정말 다양한데 서브쿼리 활용, with문 활용, 윈도우 함수 활용, join 활용 등 정말 다양하게 문제를 푸는 사람들이 있었다. 나는 그중에서도 MAX 함수의 특성을 활용해서 가장 쉬운 접근 방법인 서브쿼리를 이용해서 풀었다.
일단 기본적으로 MAX 함수를 사용하면 딱 그 컬럼(열)에서 지정된 값 중에 최대값을 가져온다. 여기까지는 누구나 다 알텐데, 나는 기본적으로 MAX 함수 사용시 최대값을 가진 ROW(행)도 같이 가져오는건줄 알았는데 아니였다,,, 왜 몰랐지??? 아니 알았을텐데 까먹은건가,,, 아무튼 그렇다고 한다. 특정값을 가져올때만 사용해서 그랬던건지...
ex) select max(컬럼) from table → 이러면 컬럼 중에서 최댓값만 딱 가져온다는 것!! 1개의 값만!!
→ select 절에 다른 컬럼을 추가해도, 최댓값의 행에 있는 값을 불러오는게 아니라, 다른 컬럼에서 제일 첫번째 값이 나옴..
→ 문법적으로는 이게 맞는거 같긴한데, 겁나 귀찮네... 알잘딱깔센해서 나오면 어디 덧나냐!!!!그러면 그 값을 가지고있는 row의 다른 컬럼들이 필요하다면?? where 조건에다가 서브쿼리로 넣어주면 된다고 한다.
이 문제에서는 최대 가격에 따라서 제품명이 제대로 나오지 않았다. 이걸 몰라서 하나하나 다 찾아봤다.
결국 제품명이 제대로 따라오지 않아 정답이 되지 않는 것이 문제. MAX 함수의 문제였다.
카테고리는 제품명의 상위 개념이고 그룹핑을 하다보니 잘 나왔다. 그러니 서브 쿼리를 사용해서 '카테고리 별 : MAX(price)' 를 where 조건에 집어넣어주면 제대로 작동하기 시작한다. 후 어렵다.
'과자', '국', '김치', '식용유' 이라는 카테고리 조건을 걸었고, 그걸 그룹핑 한다음에, 각각의 MAX 값을 매핑시킨 쿼리를
where 조건으로 걸어주면 price는 자동으로 나오게 된다!! 되게 어렵게 설명했지만,
결국에는 MAX 함수를 사용했을 때 같은 row에 있는 컬럼들을 가지고 오고 싶다면 where 절에 조건으로 걸어줘야한다는 사실~!!
(그렇지 않다면 다른 컬럼의 첫번째 값들이 나올 수 있다는 사실~!!) SQL 하면 할수록 어렵다!! 그래도 그나마 다른 언어에 비해 할만한....
https://school.programmers.co.kr/learn/courses/30/lessons/131116
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
'[코딩 테스트] > SQL 코딩 테스트' 카테고리의 다른 글
[프로그래머스 SQL] 서울에 위치한 식당 목록 출력하기 (2) | 2024.10.08 |
---|---|
[프로그래머스 SQL] 조건에 맞는 사용자 정보 조회하기 (1) | 2024.10.04 |
[프로그래머스 SQL] 있었는데요 없었습니다 (1) | 2024.09.28 |
[프로그래머스 SQL] 물고기 종류별 대어 찾기 (3) | 2024.09.27 |
[LeetCode] 550. Game Play Analysis IV (0) | 2024.02.16 |
댓글