FireDrago

[SQL] 즐겨찾기가 가장 많은 식당 정보 출력 본문

코딩테스트/프로그래머스

[SQL] 즐겨찾기가 가장 많은 식당 정보 출력

화이용 2024. 8. 21. 15:50

문제

풀이

먼저 select 문을 사용하여, 구하고자 하는 컬럼부터 표기했다

select food_type, rest_id, rest_name, favorites
from rest_info

문제에서 음식 타입별로 가장 많은 즐겨찾기를 찾으라고 했으므로

처음에는 다음과 같이 서브쿼리를 활용하여 쿼리를 짰다. 

결과는 잘 나왔지만, 틀린문제라고 표시되었다.

 

select food_type, rest_id, rest_name, favorites
from rest_info
where (rest_id, favorites) in (
    select rest_id, max(favorites)
    from rest_info
    group by food_type
)
order by food_type desc;

 

해당 쿼리를 실행해보면 알겠지만 정답이 아니라고 나온다. 왜 그럴까?

 

GROUP BY 절을 사용할 때는 SELECT 문에 나타나는 모든 열이 반드시 두가지 원칙을 지켜야한다.

1. GROUP BY 절에 그룹화된 컬럼

2. 집계함수에 사용되는 컬럼 

 

GROUP BY는 데이터를 그룹화하여 각 그룹에 대해 하나의 결과를 반환하는 역할을 한다.

따라서 그룹화되지 않은 열은 GROUP BY 없이 반환할 수 없다.

이는 SQL이 어떤 기준으로 해당 열을 선택해야 할지 모호하기 때문이다.

 

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;

 

group by 원칙을 반영하여 쿼리를 다시 짰고, 잘 통과되는 것을 볼 수 있다.