일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- collections
- lv4
- 코딩
- coding test
- level4
- 데이터분석
- 연습문제
- 코테
- 시간복잡도
- 프로그래머스
- CodingTest
- coding
- counter
- Queue
- import re
- 완전탐색
- Stack
- mysql
- join
- BFS
- 파이썬
- 코딩테스트
- programmers
- time complexity
- 조합
- lambda
- python
- itertools
- sql
- Level2
- Today
- Total
ror_coding
[Programmers Lv.4] 식품분류별 가장 비싼 식품의 정보 조회하기 - 131116 본문
728x90
간단한 문제라고 생각했는데 GROUP BY 에서의 문제점이 발생하기 때문에 JOIN을 통해 잡아준다.
Question
FOOD_PRODUCT 테이블에서 식품분류별로 가격이 제일 비싼 식품의 분류, 가격, 이름을 조회하는 SQL문을 작성해주세요. 이때 식품분류가 '과자', '국', '김치', '식용유'인 경우만 출력시켜 주시고 결과는 식품 가격을 기준으로 내림차순 정렬해주세요.
Point
- JOIN 에서 SELECT 한 값들을 main table과 연결.
- -> group by시 PRODUCT_NAME을 랜덤으로 가져오는 것을 방지.
Code (After)
SELECT CATEGORY, PRICE AS MAX_PRICE, PRODUCT_NAME
FROM (SELECT *
FROM FOOD_PRODUCT
WHERE CATEGORY IN ('과자','국','김치','식용유')) P1
WHERE PRICE = (SELECT MAX(PRICE)
FROM FOOD_PRODUCT P2
WHERE P1.CATEGORY = P2.CATEGORY)
ORDER BY 2 DESC
Code (Before)
SELECT F2.CATEGORY, F2.MAX_PRICE, PRODUCT_NAME
FROM FOOD_PRODUCT F1
JOIN (SELECT CATEGORY, MAX(PRICE) AS MAX_PRICE
FROM FOOD_PRODUCT
WHERE CATEGORY REGEXP '과자|국|김치|식용유'
GROUP BY CATEGORY) AS F2
ON F1.CATEGORY = F2.CATEGORY AND F1.PRICE = F2.MAX_PRICE
ORDER BY MAX_PRICE DESC
Wrong Code
: Group by 할 때 집계되지 않은 열 (PRODUCT_NAME)을 함께 사용하려고 할 때 정확한 값 가져오지 못 함.
SELECT CATEGORY, MAX(PRICE) AS MAX_PRICE, PRODUCT_NAME
FROM FOOD_PRODUCT
WHERE CATEGORY REGEXP '과자|국|김치|식용유'
GROUP BY CATEGORY
ORDER BY MAX_PRICE DESC
now me
On my github
728x90
'Algorithm > SQL' 카테고리의 다른 글
[Programmers Lv.4] 서울에 위치한 식당 목록 출력하기 - 131118 (0) | 2024.10.14 |
---|---|
[Programmers Lv.4] 취소되지 않은 진료 예약 조회하기 - 132204 (0) | 2024.10.14 |
[Programmers] 대장균의 크기에 따라 분류하기 2 - 301649 (0) | 2024.10.13 |
[Programmers] 물고기 종류 별 대어 찾기 - 293261 (0) | 2024.10.12 |
[Programmers] 특정 조건을 만족하는 물고기별 수와 최대 길이 구하기 - 298519 (0) | 2024.10.12 |