프로그래머스 LV 4. 131124 그룹별 조건에 맞는 식당 목록 출력하기 MySQL

https://school.programmers.co.kr/learn/courses/30/lessons/131124

SELECT 
    M.MEMBER_NAME, 
    R.REVIEW_TEXT,
    DATE_FORMAT(R.REVIEW_DATE,'%Y-%m-%d') AS REVIEW_DATE
FROM MEMBER_PROFILE AS M
JOIN REST_REVIEW AS R
ON M.MEMBER_ID = R.MEMBER_ID
WHERE M.MEMBER_ID = (
    SELECT MEMBER_ID 
    FROM REST_REVIEW
    GROUP BY MEMBER_ID
    ORDER BY COUNT(*) DESC 
    LIMIT 1)
ORDER BY R.REVIEW_DATE, R.REVIEW_TEXT;

 

 

 

중복되는 형태로 있는 자료에서 가장 갯수가 많은 것을 기준으로 정렬을 수행하고 그 중에 몇개를 뽑고 할때, 아래와 같은 형태를 잘 활용하자. 

SELECT MEMBER_ID 
FROM REST_REVIEW
GROUP BY MEMBER_ID
ORDER BY COUNT(*) DESC 
LIMIT 1

 

 

 

ORDER BY COUNT(*) DESC 가 적용되는 대상에 대해서 잘 이해해야 하는데, 위에 있는 GROUP BY 된 대상에 대해서 적용되는것을 잘 이해해야 한다. 

예, 맞습니다. `ORDER BY COUNT(*)`는 `GROUP BY`에 의해 생성된 그룹을 기반으로 수행됩니다. 따라서 `ORDER BY` 절에서 `COUNT(*)`는 `GROUP BY`로 정의된 그룹 내에서 각 그룹의 레코드 수를 나타냅니다.

기본 `MEMBER_ID`는 `REST_REVIEW` 테이블의 각 레코드에 대한 원래 값이고, `GROUP BY MEMBER_ID`는 이 값을 기준으로 그룹을 형성합니다. 그룹화된 결과를 기반으로 `COUNT(*)`는 각 그룹에 속한 레코드 수를 세게 됩니다. 따라서 `ORDER BY COUNT(*) DESC`는 각 그룹의 레코드 수를 기준으로 내림차순으로 정렬하게 됩니다.

간단히 말하면, `ORDER BY COUNT(*)`는 `GROUP BY MEMBER_ID`로 생성된 그룹에 대한 레코드 수를 기준으로 정렬하고, 이 중에서 가장 많은 레코드 수를 가진 그룹이 맨 위에 위치하도록 하는 것입니다.
  Comments,     Trackbacks