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


풀이
먼저 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 원칙을 반영하여 쿼리를 다시 짰고, 잘 통과되는 것을 볼 수 있다.
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
| [SQL] 상품 별 오프라인 매출 구하기 (0) | 2024.08.28 |
|---|---|
| [SQL] 업그레이드 할 수 없는 아이템 구하기 (0) | 2024.08.26 |
| Lv0 - 치킨쿠폰 (0) | 2023.06.25 |
| Lv0 - 캐릭터의 좌표 (자바) (0) | 2023.06.22 |
| Lv0 - 직사각형 넓이 구하기 (0) | 2023.06.18 |
