728x90
문제
https://school.programmers.co.kr/learn/courses/30/lessons/131536
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
- ONLINE_SALE 테이블에서 동일한 회원이 동일한 상품을 재구매한 데이터를 구하여, 재구매한 회원 ID와 재구매한 상품 ID를 출력하는 SQL문을 작성
- 회원 ID 기준 오름차순, 회원 ID가 같다면 상품 ID 기준 내림차순 정렬
- 쿼리 결과 : USER_ID, PRODUCT_ID
테이블
ONLINE_SALE |
![]() |
풀이과정
(1) 각 USER_ID 별 구매한 PRODUCT_ID 개수를 세는 CNT_PRO 컬럼 만들기
1 2 3 | SELECT USER_ID, PRODUCT_ID, COUNT(PRODUCT_ID) CNT_PRO FROM ONLINE_SALE GROUP BY 1,2 | cs |
(2) 각 USER_ID 별 재구매 PRODUCT_ID 구하기 (CNT_PRO가 1 초과인 행만 추출)
1 2 3 4 5 6 | SELECT USER_ID, PRODUCT_ID FROM (SELECT USER_ID, PRODUCT_ID, COUNT(PRODUCT_ID) CNT_PRO FROM ONLINE_SALE GROUP BY 1,2) UC WHERE CNT_PRO > 1 | cs |
# 정답
ORDER BY 절에 정렬 기준까지 잘 작성해주면 끝!
1 2 3 4 5 6 7 | SELECT USER_ID, PRODUCT_ID FROM (SELECT USER_ID, PRODUCT_ID, COUNT(PRODUCT_ID) CNT_PRO FROM ONLINE_SALE GROUP BY 1,2) UC WHERE CNT_PRO > 1 ORDER BY 1, 2 DESC | cs |
다른 풀이
USER_ID와 PRODUCT_ID로 그룹화 해준 뒤, USER_ID가 두 번 이상 카운트 된 행 찾기
1 2 3 4 5 | SELECT OS1.USER_ID, OS1.PRODUCT_ID FROM ONLINE_SALE AS OS1 GROUP BY 1,2 HAVING COUNT(USER_ID) >= 2 ORDER BY USER_ID, PRODUCT_ID DESC | cs |
728x90
'코딩테스트 > SQL 코드카타' 카테고리의 다른 글
MySQL 프로그래머스 | 업그레이드 된 아이템 구하기 (부모 노드, 자식 노드) (3) | 2024.09.11 |
---|---|
MySQL 프로그래머스 | 오프라인/온라인 판매 데이터 통합하기 (SELECT문 컬럼 NULL 처리) (1) | 2024.09.10 |
MySQL 프로그래머스 | 없어진 기록 찾기 (IN 또는 NOT IN 함수 안에는 IS NOT NULL) (0) | 2024.09.06 |
MySQL 해커랭크 | 15 Days of Learnig SQL (해커랭크 Hard 문제풀이, SELECT문 서브쿼리) (1) | 2024.09.05 |
MySQL 해커랭크 | Interviews (해커랭크 Hard 문제풀이) (0) | 2024.09.04 |
댓글