출처
문제
REST_INFO 테이블에서 음식종류별로 즐겨찾기수가 가장 많은 식당의 음식 종류, ID, 식당 이름, 즐겨찾기수를 조회하는 SQL문을 작성해주세요. 이때 결과는 음식 종류를 기준으로 내림차순 정렬해주세요.
문제에 대한 해석
음식 종류별 즐겨찾기 수가 가장 많은 식당의 정보
풀이1(MYSQL)-서브쿼리,자기참조
select a.food_type, (select rest_id
from rest_info
where food_type = a.food_type
order by favorites desc
limit 1) as rest_id,
(select rest_name
from rest_info
where food_type = a.food_type
order by favorites desc
limit 1) as rest_name,
max(favorites) max_favorites
from rest_info a
group by food_type
order by food_type desc
풀이 방법
https://kime2pan.tistory.com/21
해당 문제는 그룹함수를 사용하여 집계된 데이터를 추출하는 것이다. 따라서 저번에 공부한 서브쿼리-자기참조를 사용해 보았다.
단, 집계함수를 사용한 컬럼(즐겨찾기 수)외에 2개의 데이터(식당이름, 식당 아이디)를 조회해야 하므로 각 2개씩의 서브쿼리를 만들었다.
풀이2-with절
with temp as
(
select food_type, max(favorites) as max_favorites
from rest_info
group by food_type
) -- 음식 종류별 즐겨찾기가 가장 많은 걸 조회
select re.food_type, re.rest_id, re.rest_name,re.favorites
from rest_info re join temp t
on re.food_type = t.food_type -- 각 음식타입마다
and re.favorites= t.max_favorites -- 즐겨찾기 수가 같은 경우 조인
order by re.food_type desc
풀이3 -window
SELECT FOOD_TYPE,REST_ID,REST_NAME,FAVORITES
FROM
(SELECT
FOOD_TYPE,
REST_ID,
REST_NAME,
FAVORITES,
RANK() OVER(PARTITION BY FOOD_TYPE ORDER BY FAVORITES DESC) AS BB
FROM REST_INFO
ORDER BY 1,4 DESC) AS NEW
WHERE BB = 1 -- ?
ORDER BY 1 DESC
배운점
- 원칙적으로 group by의 컬럼과 select절의 컬럼(집계함수 제외)이 동일해야 한다
- 윈도우 함수를 필터링하는것..?
- 윈도우에 대해 더 정확하게 이해해야 겠다..
- 참고
- https://velog.io/@zinu/SQLD-2%EA%B3%BC%EB%AA%A9-SQL-%EA%B8%B0%EB%B3%B8-%EB%B0%8F-%ED%99%9C%EC%9A%A9-%EC%9C%88%EB%8F%84%EC%9A%B0-%ED%95%A8%EC%88%98
'문제풀이 > SQL(My sql)' 카테고리의 다른 글
[문제풀이] 없어진 기록 찾기 (0) | 2024.01.19 |
---|---|
[문제풀이] 5월 식품들의 총매출 조회하기 (0) | 2024.01.19 |
[문제풀이] 거래가격 조회/가격대 별 상품 개수 구하기 (0) | 2024.01.10 |
[문제풀이] 대여 기록이 존재하는 자동차 리스트 구하기/ 3월에 태어난 여성 회원 목록 출력하기 (1) | 2024.01.10 |
[문제풀이] SQL 개인과제 (고급 1) (0) | 2024.01.09 |