Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- dp
- 자료구조
- 코테
- 반복문
- 그리디알고리즘
- BFS
- 프로그래머스
- DFS
- 깊이우선탐색
- 수학
- DP알고리즘
- 알고리즘
- solvedac
- 파이썬
- 문제풀이
- 정렬
- 코딩테스트
- 백준
- Datastructure
- greedy
- 그래프탐색
- 너비우선탐색
- Baekjoon
- 다이나믹프로그래밍
- 큐
- 그리디
- 문자열
- 그래프
- 데이터마이닝
- PYTHON
Archives
- Today
- Total
nyunu
[MySQL] 프로그래머스 lv4 : 식품분류별 가장 비싼 식품의 정보 조회하기 (GROUP BY, WHERE) 본문
728x90
💡GROUP BY를 수행한 뒤 최대값을 추출하면
→ 최대값은 출력되지만, 최대값과 같은 행에 존재하던 값까지 함께 추출되는 것은 아니다. 따라서, 최대값을 따로 추출해주고 최대값과 동일한 값을 가지는 행을 추출해주는 방식이 알맞은 방식
💡WHERE ~ in ~ 구문을 사용할 때, 여러 개의 변수를 지정 가능하다.
EX. WHERE (A, B) in (SELECT ~ FROM ~)
문제 설명
문제
FOOD_PRODUCT 테이블에서 식품분류별로 가격이 제일 비싼 식품의 분류, 가격, 이름을 조회하는 SQL문을 작성해주세요. 이때 식품분류가 '과자', '국', '김치', '식용유'인 경우만 출력시켜 주시고 결과는 식품 가격을 기준으로 내림차순 정렬해주세요.
풀이
<처음 코드>
MAX PRICE를 구하고 & 기존 데이터 프레임에 붙여 구한 MAX PRICE와 기존 데이터 프레임의 가격이 같은 데이터에 대해서만 출력
SELECT fp.CATEGORY, fp.PRICE as MAX_PRICE, fp.PRODUCT_NAME
FROM (SELECT CATEGORY, MAX(PRICE) as maxx
FROM FOOD_PRODUCT
WHERE CATEGORY in ('과자', '국', '김치', '식용유')
GROUP BY CATEGORY) as df RIGHT JOIN FOOD_PRODUCT as fp on df.CATEGORY = fp.CATEGORY
WHERE df.maxx = fp.PRICE
ORDER BY PRICE DESC
<수정 코드>
in 문법을 사용할 때 여러 개의 변수가 사용 가능하다는 사실을 몰랐는데, 함께 조건을 줄 수 있다면 이렇게 사용하는 편이 더 맞는 코드라고 생각된다
(1) '과자', '국', '김치', '식용유' 의 카테고리에 해당하는 식품만 추출
(2) 카테고리별 GROUP BY
(3) 카테고리별 최대값, 카테고리를 반환하여 WHERE 구문 처리
(4) 출력
SELECT CATEGORY, PRICE as MAX_PRICE, PRODUCT_NAME
FROM FOOD_PRODUCT
WHERE (CATEGORY, PRICE) in (SELECT CATEGORY, MAX(PRICE)
FROM FOOD_PRODUCT
WHERE CATEGORY IN ('과자', '국', '김치', '식용유')
GROUP BY CATEGORY)
ORDER BY PRICE DESC
728x90
'코딩테스트_MySQL' 카테고리의 다른 글
[MySQL] 프로그래머스 lv3 : 카테고리 별 도서 판매량 집계하기 (GROUP BY) (0) | 2024.05.03 |
---|---|
[MySQL] 가격대 별 상품 개수 구하기 : lv2 (0) | 2024.03.03 |
[MySQL] 프로그래머스 lv.2 : 카테고리 별 상품 개수 구하기 (1) | 2024.02.28 |
SQL 정리1 (0) | 2024.02.27 |
[MySQL] 프로그래머스 lv.1 : 나이 정보가 없는 회원 수 구하기 (0) | 2024.01.30 |