코딩테스트 연습 - 즐겨찾기가 가장 많은 식당 정보 출력하기 | 프로그래머스 스쿨 (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
'코딩테스트 > MySQL' 카테고리의 다른 글
[프로그래머스 Level 3] 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기(MySQL) .Feat 날짜 비교 (0) | 2024.08.16 |
---|---|
[프로그래머스 Level 3] 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기 (MySQL) (1) | 2024.07.17 |
[프로그래머스 Level 3] 오랜 기간 보호한 동물(MySQL) .Feat LEFT OUTER JOIN (0) | 2024.06.29 |
[프로그래머스 Level 2] 연도별 대장균 크기의 편차 구하기(MySQL) .Feat 스칼라 서브쿼리 성능 개선 (0) | 2024.06.26 |
[프로그래머스 Level 2] 분기별 분화된 대장균의 개체 수 구하기(MySQL) .Feat 문자열 합치기 (0) | 2024.06.26 |