💥 CODEKATA
~50문제
튜터님 강의 듣고 찾아봤는데 수많은 기업들이 예약어는 대문자로 많이 쓰더라
그래서 소문자만 고집하던 것과 최대한 엔터를 덜 치는 고집을 바꾸기로 함
하지만 컬럼들 하나하나 다 엔터치는 건 못참겠다;
오늘의 코드카타 후기 : GROUP BY 실수하지 말자 !
# 내코드
# 결과는 맞는데, 자꾸 오답으로 나와서 뭔지 검색해봤다.
# 여태 group by 공식을 무시한 채로 코드를 작성하고 있었다 . ..!! 충격
SELECT
category, MAX(price) AS max_price, product_name
FROM
food_product
WHERE
category IN ('과자', '국', '김치', '식용유')
GROUP BY
category
ORDER BY
MAX(price) DESC
# 답코드1 - 서브쿼리, JOIN, MAX 사용
# 카테고리 별로 제일 비싼걸 서브쿼리로 묶기
SELECT
a.category, a.max_price, fp.product_name
FROM
food_product fp
JOIN (
SELECT
category, MAX(price) AS max_price
FROM
food_product
WHERE
category IN ('과자', '국', '김치', '식용유')
GROUP BY
category
) a ON fp.category = a.category AND fp.price = a.max_price
GROUP BY
a.category
ORDER BY
a.max_price DESC
# 답코드2 - 서브쿼리, RANK() 사용
# 이게 더 마음에 듦
SELECT
a.category, a.price as max_price, a.product_name
FROM
(
SELECT
category,
RANK() OVER(PARTITION BY category ORDER BY price DESC) AS rnk,
price, product_name
FROM
food_product
WHERE
category IN ('과자', '국', '김치', '식용유')
) a
WHERE
a.rnk = 1
ORDER BY
max_price desc
위의 49번 문제랑 거의 동일함
왜 49번부터 풀었는지는 의문ㅎ
SELECT
a.food_type, a.rest_id, a.rest_name, a.favorites
FROM
(
SELECT
food_type, rest_id, rest_name, favorites,
RANK() OVER(PARTITION BY food_type ORDER BY favorites DESC) AS rnk
FROM
rest_info
) a
WHERE
a.rnk = 1
ORDER BY
food_type DESC
50) 5월 식품들의 총매출 조회하기
# 내코드
# 답은 맞는데 GROUP BY 또 실수했다...
SELECT
a.product_id, a.product_name, SUM(a.total) AS total_sales
FROM
(
SELECT
fp.product_id, fp.product_name, (fp.price*fo.amount) as total
FROM
food_product fp JOIN food_order fo ON fp.product_id = fo.product_id
WHERE
fo.produce_date like "2022-05-%"
) a
GROUP BY
a.product_id
ORDER BY
total_sales DESC,
a.product_id ASC
# 답코드 1
# 내 코드에서 GROUP BY에 a.product_name만 추가
SELECT
a.product_id, a.product_name, SUM(a.total) AS total_sales
FROM
(
SELECT
fp.product_id, fp.product_name, (fp.price*fo.amount) as total
FROM
food_product fp JOIN food_order fo ON fp.product_id = fo.product_id
WHERE
fo.produce_date like "2022-05-%"
) a
GROUP BY
a.product_id, a.product_name
ORDER BY
total_sales DESC,
a.product_id ASC
# 답코드 2
# 이건 join 3번해서 마음에 안듦
SELECT
a.product_id, a.product_name, b.total_sales
FROM
food_product a JOIN
(
SELECT
fp.product_id, SUM(fp.price*fo.amount) as total_sales
FROM
food_product fp JOIN food_order fo ON fp.product_id = fo.product_id
WHERE
fo.produce_date like "2022-05-%"
GROUP BY
fp.product_id
) b ON a.product_id = b.product_id
ORDER BY
b.total_sales DESC,
a.product_id ASC
'Sparta > CODEKATA' 카테고리의 다른 글
| [250822] 스파르타코딩 본캠프 14일차 (2) (0) | 2025.08.22 |
|---|---|
| [250821] 스파르타코딩 본캠프 13일차 (2) (0) | 2025.08.21 |
| [250819] 스파르타코딩 본캠프 11일차 (2) (0) | 2025.08.19 |
| [250818] 스파르타코딩 본캠프 10일차 (2) (4) | 2025.08.18 |
| [250814] 스파르타코딩 본캠프 9일차 (2) (4) | 2025.08.14 |