SQL/프로그래머스
프로그래머스 - 그룹별 조건에 맞는 식당 목록 출력하기
데건
2024. 7. 15. 10:33
728x90
해결일 | 언어 | 레벨 | 테스트명 |
20240715 | SQL | level 4 | 그룹별 조건에 맞는 식당 목록 출력하기 |
링크 : https://school.programmers.co.kr/learn/courses/30/lessons/131124
내 코드
SELECT
MEMBER_NAME
,REVIEW_TEXT
,DATE_FORMAT(REVIEW_DATE,'%Y-%m-%d') REVIEW_DATE
FROM REST_REVIEW
JOIN MEMBER_PROFILE
USING (MEMBER_ID)
# 2. 개수가 MAX 개수인 모든 MEMBER_ID를 구하는 서브쿼리
WHERE MEMBER_ID IN (SELECT MEMBER_ID
FROM REST_REVIEW
GROUP BY MEMBER_ID
# 1. MAX 개수를 구하는 서브쿼리
HAVING COUNT(REVIEW_ID) = (SELECT COUNT(REVIEW_ID) CNT
FROM REST_REVIEW
GROUP BY MEMBER_ID
ORDER BY COUNT(REVIEW_ID) DESC
LIMIT 1))
ORDER BY 3,2
1. 서브쿼리에서 구할 수 있는 MAX 개수는 3
2. 따라서 포스트 수가 3개인 모든 MEMBER에 대한 글을 출력하면 된다.
에러 없이 한 번에 풀려서 기분 좋다 ㅎㅎ
개선점:
MAX를 구하는 방식에서 나는 DESC LIMIT1을 사용하는 다소 번거로운 방법을 썼는데,
그냥 MAX 함수를 쓰면 될 일이다...
베스트 코드
WITH REVIEW_COUNT_BY_MEMBER AS (
SELECT MEMBER_ID, COUNT(*) AS REVIEW_COUNT
FROM REST_REVIEW
GROUP BY MEMBER_ID
),
MAX_REVIEW_COUNT AS (
SELECT MEMBER_ID
FROM REVIEW_COUNT_BY_MEMBER
WHERE REVIEW_COUNT = (SELECT MAX(REVIEW_COUNT) FROM REVIEW_COUNT_BY_MEMBER)
)
SELECT
MP.MEMBER_NAME,
RR.REVIEW_TEXT,
DATE_FORMAT(RR.REVIEW_DATE, '%Y-%m-%d') AS REVIEW_DATE
FROM
MAX_REVIEW_COUNT AS MRC
JOIN MEMBER_PROFILE AS MP ON MRC.MEMBER_ID = MP.MEMBER_ID
JOIN REST_REVIEW AS RR ON MRC.MEMBER_ID = RR.MEMBER_ID
ORDER BY
REVIEW_DATE ASC,
REVIEW_TEXT ASC;
728x90