_Han_
나의 개발 노트
_Han_
  • 분류 전체보기 (272)
    • 데이터 엔지니어링 (29)
    • 인프라 (3)
    • 추천시스템 (11)
    • 코딩테스트 (146)
    • 부트캠프 회고 (15)
    • 회고 (4)
    • 자격증 (1)
    • 파이썬 프로그래밍 (6)
    • 통계 (2)
    • Git (21)
    • 유니티2D (33)

최근 글

반응형
hELLO · Designed By 정상우.
_Han_

나의 개발 노트

[코딩테스트] 프로그래머스 즐겨찾기가 가장 많은 식당 정보 출력하기 MySQL
코딩테스트

[코딩테스트] 프로그래머스 즐겨찾기가 가장 많은 식당 정보 출력하기 MySQL

2022. 12. 5. 15:27
반응형

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
    '코딩테스트' 카테고리의 다른 글
    • [코딩테스트] 프로그래머스 5월 식품들의 총매출 조회하기
    • [코딩테스트] 프로그래머스 헤비 유저가 소유한 장소 MySQL
    • [코딩테스트] 프로그래머스 조건별로 분류하여 주문상태 출력하기 MySQL
    • [코딩테스트] 프로그래머스 없어진 기록 찾기 MySQL
    _Han_
    _Han_
    학습한 것을 기록합니다.

    티스토리툴바