알고리즘(PS)/sql

[프로그래머스 MySql] 즐겨찾기가 가장 많은 식당 정보 출력하기

5353 2024. 2. 15. 04:34
반응형

https://school.programmers.co.kr/learn/courses/30/lessons/131123

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

GROUP BY 정도야 껌이라고 생각하고 들어갔다가 호되게 맞았다..

<오답 코드>

SELECT FOOD_TYPE,REST_ID,REST_NAME, MAX(FAVORITES) as FAVORITES
FROM(
SELECT FOOD_TYPE,REST_ID,REST_NAME,COALESCE(FAVORITES,0) as FAVORITES
from REST_INFO
)r
group by r.FOOD_TYPE
order by FOOD_TYPE desc;

 

코드가 틀린 이유

SQL 표준에 따르면GROUP BY 절에  쓰지않은 모든 컬럼은 집계 함수 내에서 사용되어야 한다.

그러나 REST_ID REST_NAME은 집계되지 않은 상태로 쿼리에 포함되어 있고, 이로 인해 REST_ID REST_NAME에 대한 명확하지 않은 값이 결과로 반환될 수 있다. 

참고로 MySQL에서는 임의로 대체해 오류가 안나지만 다른 DBMS에서는 오류가 난다고 한다

( 그래서 더 헷갈린다...)

 

<정답 코드>

-- 코드를 입력하세요
SELECT r.FOOD_TYPE,r.REST_ID,r.REST_NAME,r.FAVORITES
FROM REST_INFO r
INNER JOIN(
SELECT FOOD_TYPE, MAX(COALESCE(FAVORITES,0)) as FAVORITES
from REST_INFO 
group by FOOD_TYPE
) AS p 
ON p.FOOD_TYPE = r.FOOD_TYPE AND p.FAVORITES = r.FAVORITES
order by FOOD_TYPE desc;

 

 

 

 

 

 

 

반응형