일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- db replication
- 동적 계획법
- Python
- error:0308010C:digital envelope routines::unsupported
- 모듈러 연산 분배법칙
- 문자열
- bfs
- npm start
- 배낭 문제
- 그래프 탐색
- 클래스
- 그래프탐색
- 수학
- 파이썬
- 다이나믹 프로그래밍
- 냅색 알고리즘
- LCS 알고리즘
- 구현
- 최장공통부분수열
- dfs
- 깊이 우선 탐색
- Container vs VM
- 일단 시도
- 너비 우선 탐색
- 정처기 필기
- 최장공통부분문자열
- Docker 원리
- lazy evaluation
- 그래프 이론
- 나는 바보야...
Archives
- Today
- Total
Save my data
[프로그래머스 SQL] Lv4. 그룹별 조건에 맞는 식당 목록 출력하기 본문
더보기
SELECT B.MEMBER_NAME, A.REVIEW_TEXT, DATE_FORMAT(A.REVIEW_DATE, "%Y-%m-%d") AS REVIEW_DATE
FROM REST_REVIEW A
JOIN (
SELECT DENSE_RANK() OVER (ORDER BY COUNT(M.MEMBER_ID) DESC) AS RANKING, M.MEMBER_ID, M.MEMBER_NAME
FROM MEMBER_PROFILE M
JOIN REST_REVIEW R
ON M.MEMBER_ID = R.MEMBER_ID
GROUP BY M.MEMBER_ID
ORDER BY RANKING, REVIEW_DATE, R.REVIEW_TEXT
) B
ON A.MEMBER_ID = B.MEMBER_ID
WHERE B.RANKING = 1
ORDER BY REVIEW_DATE, A.REVIEW_TEXT
서브쿼리 + GROUP BY + DENSE_RANK 를 활용하였고 핵심 아이디어는 이렇습니다.
1. 테이블에서 리뷰를 제일 많이 쓴 사람을 어떻게 판별할까?
▶ 결국에 사람마다 쓴 리뷰 개수를 세야겠군.
▶ GROUP BY + COUNT
2. 개수가 제일 많은 것만 어떻게 가져올까?
▶ 개수를 센 다음 RANK 로 1등을 가져와야겠다.
▶ RANK (DENSE_RANK)
3. GROUP BY를 하면 개수는 잘 세는데 중복 행은 다 제거된다.
▶ 개수만 세는 쿼리를 서브쿼리로 만들어서 메인 쿼리문에 조인시켜야겠다.
▶ 서브쿼리 + JOIN
'알고리즘 & SQL > 프로그래머스' 카테고리의 다른 글
[프로그래머스 SQL] Lv4. 특정 세대의 대장균 찾기 (0) | 2025.02.20 |
---|---|
[프로그래머스 SQL] Lv4. 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기 (0) | 2025.02.18 |
[프로그래머스 SQL] Lv3. 대장균의 크기에 따라 분류하기 2 (NTILE 없이) (0) | 2025.02.14 |
프로그래머스 lv2. 석유 시추 (0) | 2024.04.24 |
프로그래머스 lv1. 바탕화면 정리 (파이썬) (0) | 2023.03.15 |
Comments