https://school.programmers.co.kr/learn/courses/30/lessons/131123
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
오답코드
정답 코드에 대한 이야기를 하기 전에 먼저 오답 코드를 이야기해보려고 합니다.
SELECT FOOD_TYPE, REST_ID, REST_NAME, MAX(FAVORITES)
FROM REST_INFO
GROUP BY FOOD_TYPE
ORDER BY FOOD_TYPE DESC
GROUP BY와 MAX()함수를 사용하여 결과를 도출하고 내림차순 정렬을 하면 쉽게 문제를 해결할 수 있겠구나 라는 아이디어를 통하여 접근을 했습니다.
위의 코드는 다음과 같은 결과를 반환하게 됩니다.
큰 문제가 없어 보이지만 아래의 코드를 통하여 어떤 문제가 있었는지 확인하겠습니다.
SELECT FOOD_TYPE, REST_ID, REST_NAME, FAVORITES
FROM REST_INFO
WHERE FOOD_TYPE LIKE '%일식%'
ORDER BY FAVORITES DESC
코드는 FOOD_TYPE이 일식의 정보를 FAVORITES를 기준으로 내림차순 정렬한 값입니다.
결과를 확인해보면 우리가 구해야하는 식당 중 일식의 정보는 다음과 같습니다.
- FOOD_TYPE : 일식
- REST_ID : 00004
- REST_NAME : 스시사카우스
- FAVORITES : 230
하지만 오답 코드의 결과를 보면 MAX(FAVORITES)의 값만 동일하고 REST_ID, REST_NAME은 다른 것을 알 수 있습니다.
왜 그런지 자세한 내용은 아래의 글을 확인하면 좋겠습니다.
https://school.programmers.co.kr/questions/38703
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
요약을 하자면 MAX(FAVORITES)의 값은 올바르게 구해왔지만 그에 따른 값들은 올바르게 구해오지 못하고 GROUP BY로 묶인 첫번째 값을 불러온것으로 보입니다.
정답코드
SELECT FOOD_TYPE, REST_ID, REST_NAME, FAVORITES
FROM REST_INFO R
JOIN
(SELECT MAX(FAVORITES) AS MAX_FAVOR FROM REST_INFO GROUP BY FOOD_TYPE) AS I
ON R.FAVORITES = I.MAX_FAVOR
GROUP BY FOOD_TYPE
ORDER BY FOOD_TYPE DESC
이제 정답 코드에 대하여 이야기를 해보겠습니다.
위 오답코드에서의 문제점은 MAX()함수로 MAX값을 가지고 오지만 그에 따른 데이터를 가져오지 못했기 때문에
REST_INFO 테이블을 FOOD_TYPE으로 그룹화를 한 후에 MAX값만 추출한 테이블 I 를 새롭게 만들고 R 테이블과 JOIN 하여
MAX값에 따른 데이터를 가져와 문제를 해결할 수 있었습니다.
'코딩테스트' 카테고리의 다른 글
[코딩테스트] 프로그래머스 5월 식품들의 총매출 조회하기 (0) | 2022.12.06 |
---|---|
[코딩테스트] 프로그래머스 헤비 유저가 소유한 장소 MySQL (0) | 2022.12.05 |
[코딩테스트] 프로그래머스 조건별로 분류하여 주문상태 출력하기 MySQL (0) | 2022.12.04 |
[코딩테스트] 프로그래머스 없어진 기록 찾기 MySQL (0) | 2022.12.04 |
[코딩테스트] 프로그래머스 있었는데요 없었습니다 MySQL (0) | 2022.12.03 |