Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 | 31 |
Tags
- outer join
- ChatGPT
- ABAE
- 프로그래머스
- NLP
- 연구
- 머신러닝
- join
- SQL 첫걸음
- Aspect
- LLM
- 가상환경
- gpt1
- 알고리즘
- 파이썬
- GPT
- deepseek
- dfs
- 백준
- paper review
- Bert
- 코딩테스트
- 분산
- 자연어처리
- SQL
- leetcode
- MySQL
- transformer
- 논문리뷰
- 그래프
Archives
- Today
- Total
huginn muninn
[프로그래머스] 그룹별 조건에 맞는 식당 목록 출력하기 SQL 본문
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr

WITH MAX_REVIEW_COUNT AS (
SELECT MEMBER_ID
FROM (
SELECT MEMBER_ID, COUNT(*) AS REVIEW_COUNT
FROM REST_REVIEW
GROUP BY MEMBER_ID
) AS REVIEW_COUNT_BY_MEMBER
WHERE REVIEW_COUNT = (
SELECT MAX(REVIEW_COUNT)
FROM (
SELECT COUNT(*) AS REVIEW_COUNT
FROM REST_REVIEW
GROUP BY MEMBER_ID
) AS TOTAL_REVIEW_COUNT
)
)
SELECT
MEMBER_PROFILE.MEMBER_NAME,
REST_REVIEW.REVIEW_TEXT,
DATE_FORMAT(REST_REVIEW.REVIEW_DATE, '%Y-%m-%d') AS REVIEW_DATE
FROM
MAX_REVIEW_COUNT
LEFT JOIN MEMBER_PROFILE ON MAX_REVIEW_COUNT.MEMBER_ID = MEMBER_PROFILE.MEMBER_ID
LEFT JOIN REST_REVIEW ON MAX_REVIEW_COUNT.MEMBER_ID = REST_REVIEW.MEMBER_ID
ORDER BY
REVIEW_DATE ASC,
REVIEW_TEXT ASC;
이 문제에서 내가 유의했던 건, 리뷰를 가장 많이 쓴 사람이 여러 명일수도 있다는 점이었다. 그래서 확인해보니 리뷰를 3개 쓴 사람이 가장 많았고, 리뷰를 3개 쓴 사람은 3명이나 있었다. 그래서 이 사람들을 모두 출력해줘야했다.
그래서 with에서 리뷰 3개 쓴 사람의 아이디를 저장해주었다.
<코드 개선>
코드를 다 짜고나니, with 절에 where에서 너무 복잡해보여서 좀 개선해봤다.
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;
코드 구현 시 꼭 지키려고 했던 것
- alias 꼭 as 로 써주기 : 코드 읽는 사람으로 하여금 as 뒤에 이름 써 있는게 더 가독성이 좋음.
- 들여쓰기 : 가독성이 좋기 때문에.
- 대문자
- alias 만 봐도 어떤 테이블인지 알도록 이름지어주기 a, a1 이런거 되도록 지양하기.
'코딩테스트' 카테고리의 다른 글
| [프로그래머스] 연간 평가점수에 해당하는 평가 등급 및 성과금 조회 (0) | 2024.06.19 |
|---|---|
| [프로그래머스] 상품을 구매한 회원 비율 구하기 SQL (0) | 2024.06.14 |
| [프로그래머스] 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기 SQL (0) | 2024.06.13 |
| [프로그래머스] 조건에 맞는 개발자 찾기 SQL (1) | 2024.04.19 |
| [백준] 1244 파이썬 스위치 켜고 끄기 런타임 에러 (0) | 2024.04.15 |