- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 프로그래머스 SQL
- 쉽게 배우는 데이터 통신과 컴퓨터 네트워크 답지
- yarn 설치 에러
- 컴퓨터통신
- 쉽게 배우는 데이터 통신과 컴퓨터 네트워크
- gpt-api에러
- map
- pre-course
- 컴퓨터 통신
- 연관분석
- 딥러닝 역사
- 프로그래머스
- HackerRank
- MySQL
- python
- sql
- pandas
- 부스트캠프
- inner join
- 역전파
- 깃
- TabNet
- ERROR: install is not COMMAND nor fully qualified CLASSNAME.
- 행렬
- 코딩테스트
- 딥러닝 개요
- NumPy
- 부스트캠프ai
- gpt-api
- npm install -g yarn 에러
최말짱 블로그
[프로그래머스]식품분류별 가장 비싼 식품의 정보 조회하기(MYSQL풀이) 본문
[ 문제 링크 ]
https://school.programmers.co.kr/learn/courses/30/lessons/131116
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
[ 문제 설명 ]
다음은 식품의 정보를 담은 FOOD_PRODUCT 테이블입니다. FOOD_PRODUCT 테이블은 다음과 같으며 PRODUCT_ID, PRODUCT_NAME, PRODUCT_CD, CATEGORY, PRICE는 식품 ID, 식품 이름, 식품코드, 식품분류, 식품 가격을 의미합니다.
Column nameTypeNullablePRODUCT_ID | VARCHAR(10) | FALSE |
PRODUCT_NAME | VARCHAR(50) | FALSE |
PRODUCT_CD | VARCHAR(10) | TRUE |
CATEGORY | VARCHAR(10) | TRUE |
PRICE | NUMBER | TRUE |
문제
FOOD_PRODUCT 테이블에서 식품분류별로 가격이 제일 비싼 식품의 분류, 가격, 이름을 조회하는 SQL문을 작성해주세요. 이때 식품분류가 '과자', '국', '김치', '식용유'인 경우만 출력시켜 주시고 결과는 식품 가격을 기준으로 내림차순 정렬해주세요.
예시
FOOD_PRODUCT 테이블이 다음과 같을 때
PRODUCT_IDPRODUCT_NAMEPRODUCT_CDCATEGORYPRICEP0018 | 맛있는고추기름 | CD_OL00008 | 식용유 | 6100 |
P0019 | 맛있는카놀라유 | CD_OL00009 | 식용유 | 5100 |
P0020 | 맛있는산초유 | CD_OL00010 | 식용유 | 6500 |
P0021 | 맛있는케첩 | CD_SC00001 | 소스 | 4500 |
P0022 | 맛있는마요네즈 | CD_SC00002 | 소스 | 4700 |
P0039 | 맛있는황도 | CD_CN00008 | 캔 | 4100 |
P0040 | 맛있는명이나물 | CD_CN00009 | 캔 | 3500 |
P0041 | 맛있는보리차 | CD_TE00010 | 차 | 3400 |
P0042 | 맛있는메밀차 | CD_TE00001 | 차 | 3500 |
P0099 | 맛있는맛동산 | CD_CK00002 | 과자 | 1800 |
SQL을 실행하면 다음과 같이 출력되어야 합니다.
CATEGORYMAX_PRICEPRODUCT_NAME식용유 | 6500 | 맛있는산초유 |
과자 | 1800 | 맛있는맛동산 |
[ 풀이 ]
첫 번째 풀이
SELECT CATEGORY, MAX(PRICE) AS MAXPRICE, PRODUCT_NAME
FROM FOOD_PRODUCT
WHERE CATEGORY IN ('과자','국','김치','식용유')
GROUP BY CATEGORY
ORDER BY PRICE DESC;
무엇이 틀린지 알겠나요....?
이 코드엔 문제가 있다.
왜냐면 GROUP BY를 통해 카테고리별로 MAX(PRICE)까지 들고오는건 문제가 없는데
PRODUCT_NAME을 출력할 때 MAX(PRICE)에 해당하는 PRODUCT_NAME이 아니라
GROUP BY를 했을 때 각 카테고리별로 가장 첫 번째의 행에 대한 PRODUCT_NAME을 출력한다.
아래의 링크를 통해 자세한 설명을 참고할 수 있었다.
b1ix | [MYSQL] group by로 뽑아온 값중에 가장큰 값(max)의 상태값을 가져오기 2012-07-21
b1ix | [MYSQL] group by로 뽑아온 값중에 가장큰 값(max)의 상태값을 가져오기 2012-07-21
b1ix.net
그래서 카테고리별로 MAX_PRICE를 구하고 그 테이블을 JOIN이나 다른 조건을 통해서 합쳐준 후 출력할 수 있다.
[ 최종 정답 코드 ]
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 MAX_PRICE DESC
카테고리(과자,국,김치,식용유)별 MAX_PRICE를 구해준 후
WHERE절을 이용하여 원본 테이블에서 해당 (CATEGORY, PRICE)의 튜플과 일치하는 데이터만 들고 오도록 했다.
'HackerRank SQL' 카테고리의 다른 글
[프로그래머스]조건에 맞는 도서와 저자 리스트 출력하기(mysql풀이) (0) | 2023.02.24 |
---|---|
[프로그래머스]입양 시각 구하기(2)(mysql풀이) (0) | 2023.02.24 |
[HackerRank]Top Competitors(mysql풀이) (0) | 2022.07.12 |
[HackerRank] The Report(mysql풀이) (0) | 2022.07.10 |