본문 바로가기

SQL/프로그래머스 SQL 고득점 kit

SQL 고득점 kit / GROUP BY / 즐겨찾기가 가장 많은 식당 정보 출력하기 / MySQL (GROUP BY, 서브쿼리)

728x90

📚문제

출처 : 프로그래머스(https://school.programmers.co.kr/learn/courses/30/lessons/131123)

 

📝풀이

# 오답코드
SELECT FOOD_TYPE
     , REST_ID
     , REST_NAME
     , MAX(FAVORITES) AS FAVORITES
FROM REST_INFO
GROUP BY FOOD_TYPE 
ORDER BY FOOD_TYPE DESC

너무 당연하게 위의 코드처럼 풀었는데 오답이 나왔다...

구글링해서 찾아보니 서브쿼리를 사용해서 풀었는데 값은 똑같이 나왔다

그러다가 한 분이 남겨놓은 링크를 타고 들어가서 해법을 얻었다

출처 : https://school.programmers.co.kr/questions/38854
정말로 그렇게 나온다

 

GROUP BY로 묶으면 묶이는 그룹(여기선 FOOD_TYPE)의 가장 상단의 데이터를 가져온다

 

기억하자!

이유는 쿼리의 실행순서 때문

출처 : https://monawa.tistory.com/125

 

# 정답코드
SELECT *
FROM REST_INFO
WHERE (FOOD_TYPE,FAVORITES) IN (SELECT FOOD_TYPE, MAX(FAVORITES)
				FROM REST_INFO
                                GROUP BY FOOD_TYPE)

 

SELECT FOOD_TYPE, MAX(FAVORITES)
FROM REST_INFO
GROUP BY FOOD_TYPE

위 코드를 실행하면 이렇게 나온다

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

데이터리안에서 GA4수업을 먼저 수강하기로해서 실전반은 수강을 못했다( 입문반만 들어서 서브쿼리는 아직 낯설다)

그래도 언젠간 해야하니 조금씩 뜯어보면서 익숙해지자

 

WHERE (조건컬럼1,조건컬럼2...) IN ( SQL쿼리문 ) 구조

1. WHERE 구문에서 FOOD_TYPE과 FAVORITES 컬럼을 이용하여 필터링

3. IN () 안에 원하는 조건을 가진 새로운 테이블 생성 

4. 해당 테이블에서 필요한 컬럼(이미 필터링 되어있음) 가져오기 

 

이런 흐름인것 같다

 

 


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

이제 이런 풀이가 자연스럽게 나오게 됐다

 

728x90