SQL/프로그래머스 SQL 고득점 kit
SQL 고득점 kit / GROUP BY / 즐겨찾기가 가장 많은 식당 정보 출력하기 / MySQL (GROUP BY, 서브쿼리)
박혀노
2023. 10. 26. 20:10
728x90
📚문제
📝풀이
# 오답코드
SELECT FOOD_TYPE
, REST_ID
, REST_NAME
, MAX(FAVORITES) AS FAVORITES
FROM REST_INFO
GROUP BY FOOD_TYPE
ORDER BY FOOD_TYPE DESC
너무 당연하게 위의 코드처럼 풀었는데 오답이 나왔다...
구글링해서 찾아보니 서브쿼리를 사용해서 풀었는데 값은 똑같이 나왔다
그러다가 한 분이 남겨놓은 링크를 타고 들어가서 해법을 얻었다
GROUP BY로 묶으면 묶이는 그룹(여기선 FOOD_TYPE)의 가장 상단의 데이터를 가져온다
기억하자!
이유는 쿼리의 실행순서 때문
# 정답코드
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