강의로 돌아가기
sugyeongg91@gmail.com

왜 이렇게 작성하면 안 되나요?

SELECT FOODTYPE, RESTID, RESTNAME, MAX(FAVORITES) AS FAVORITES
FROM REST
INFO
GROUP BY FOODTYPE
ORDER BY FOOD
TYPE DESC;

작성중인 코드―solution.sql
1
2
3
4
5
-- 코드를 입력하세요
SELECT FOOD_TYPE, REST_ID, REST_NAME, MAX(FAVORITES)
FROM REST_INFO
GROUP BY FOOD_TYPE
ORDER BY FOOD_TYPE DESC;
1 개의 답변
Coziness

GROUP BY로 묶으면 가장 상단에 있는 데이터들을 임의로 가져옵니다.

SELECT * FROM REST_INFO;
위의 쿼리를 실행해보면 REST_ID 순으로 정렬된 테이블이 나옵니다.
여기서 GROUP BY FOOD_TYPE으로 묶으면 한식의 맨 첫번째, 일식의 맨 첫번째 ... 를 가져옵니다.
(문제에서 요구하는 즐겨찾기 수가 가장 많은 식당의 정보가 아닌 테이블에서 가장 상단의 식당 정보를 가져오는 거죠)

올려주신 쿼리대로 실행하면
한식, 중식, 양식, 분식은 임의로 가져온 가장 상단의 값이 운좋게 답과 일치하지만
일식은 답과 다른 REST_ID, REST_NAME값을 가져오게 됩니다.

SELECT FOOD_TYPE, REST_ID, REST_NAME, FAVORITES, MAX(FAVORITES)
FROM REST_INFO
GROUP BY FOOD_TYPE
ORDER BY FOOD_TYPE DESC;

위 쿼리는 올려주신 쿼리에서 SELECT 절에 FAVORITES만 추가한 쿼리입니다.
실행해보시면 일식 식당의 FAVORITES값이 잘못되었다는 것을 알 수 있을 겁니다.

  • 박종찬

    감사합니다 :)

    박종찬―2023.01.05 16:15
  • 전현서

    SUM(), COUNT(*) 같은건 되가지고 당연히 MAX()도 되겠지 생각하고 했었는데, 이건 정말로 나이스하네요. GROUP BY가 MAX함수까지 커버하지 못한다는 사실이 매우 충격입니다. 아직 갈 길이 멀었네용.. 친절한 설명 감사합니다

    전현서―2023.01.27 08:03
  • 손종효

    덕분에 하나 알아갑니다 감사합니다!

    손종효―2023.09.16 23:30
답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다. 마크다운 가이드 를 참고하세요.