Skip to content

MySQL | 즐겨찾기가 가장 많은 식당 정보 출력하기  #1

@cocorig

Description

@cocorig

문제

REST_INFO 테이블에서 음식종류별로 즐겨찾기수가 가장 많은 식당의 음식 종류, ID, 식당 이름, 즐겨찾기수를 조회하는 SQL문을 작성해주세요. 이때 결과는 음식 종류를 기준으로 내림차순 정렬해주세요

FOOD_TYPE별 로 묶어서 FAVORITES 수를 기준으로 내림차로 정렬

SELECT FOOD_TYPE, REST_ID, REST_NAME, FAVORITES,
           ROW_NUMBER() OVER(PARTITION BY FOOD_TYPE ORDER BY FAVORITES DESC) as rn
 FROM REST_INFO
스크린샷 2024-01-05 오후 3 33 59

순위가 1인 데이터만 선택해 음식 종류를 기준으로 내림차순 정렬한다

SELECT FOOD_TYPE, REST_ID, REST_NAME, FAVORITES
FROM (
    SELECT FOOD_TYPE, REST_ID, REST_NAME, FAVORITES,
           ROW_NUMBER() OVER(PARTITION BY FOOD_TYPE ORDER BY FAVORITES DESC) as rn
    FROM REST_INFO
) ranked   -- 내부쿼리의 결과를 담은 임시 테이블 이름
WHERE rn = 1
ORDER BY FOOD_TYPE DESC;
스크린샷 2024-01-05 오후 3 41 14

ROW_NUMBER()

  • 각 PARTITION 내에서 ORDER BY절에 의해 정렬된 순서를 기준으로 고유한 값을 반환하는 함수 , 행에 번호를 부여
ROW_NUMBER() OVER(PARTITION BY [그룹핑할 컬럼] ORDER BY [정렬할 컬럼])
- PARTITION BY는 선택, ORDER BY는 필수
  • RANK() : 1등이 두명이면, 그 다음 순위는 3등이 된다.

  • DENSE_RANK() : 1등이 두명이면 그 다음 순위는 2등이 된다.

  • ROW_NUMBER() 함수는 행에 번호를 부여

  • OVER() 함수 내부에 PARTITION BY FOOD_TYPE 구문은 데이터를 FOOD_TYPE 컬럼을 기준으로 그룹화한다.

  • 즉, 같은 음식 종류를 가진 데이터끼리 묶어 출력한다.

  • ORDER BY FAVORITES DESC는 각 그룹 내에서 FAVORITES 컬럼을 내림차순으로 정렬한다.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions