코딩테스트 연습 - 즐겨찾기가 가장 많은 식당 정보 출력하기 | 프로그래머스 스쿨 (programmers.co.kr)

 

프로그래머스

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

programmers.co.kr

 

 

문제에 음식종류별로 즐겨찾기수가 가장 많은 식당라고 적혀있어서 group by를 써야 하는 줄 알았다. 그래서 group by와 max를 이용해 문제를 풀었는데 계속 틀렸습니다가 나왔다. group by가 아닌가 하고 서브쿼리로 다시 구현했는데 맞았다. 

group by가 안 된 이유는 다른 컬럼을 출력해줘야 하기 때문이다. 집계함수를 쓰지 않은 컬럼은 group으로 묶었을 때 상단에 있는 데이터들을 임의로 가져온다. 따라서 MAX()는 제대로 나올지언정 나머지 컬럼은 MAX()로 뽑힌 로우가 아닌 다른 로우의 데이터가 들어가게 된다.

결론 : group by를 사용할 때 컬럼에 집계함수를 써야하는 게 아니면 다른 로직을 생각해보자.

 

 

SELECT FOOD_TYPE, REST_ID, REST_NAME, FAVORITES
FROM REST_INFO M
WHERE (M.FOOD_TYPE, M.FAVORITES) IN (SELECT FOOD_TYPE, MAX(FAVORITES) AS FAVORITES
FROM REST_INFO
GROUP BY FOOD_TYPE)
ORDER BY FOOD_TYPE DESC

+ Recent posts