PS/SQL
[SQL] 재구매가 일어난 상품과 회원 리스트 구하기
행복한라이언
2024. 1. 29. 22:29
728x90
반응형
문제링크
https://school.programmers.co.kr/learn/courses/30/lessons/131536
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
1. 핵심
- 동일한 회원이 동일한 상품을 재구매한 데이터를 구하여, 재구매한 회원 ID와 재구매한 상품 ID를 출력
- 회원 & 상품 데이터를 엮어야함 > group by USER_ID, PRODUCT_ID
- 재구매 상품 > COUNT(PRODUCT_ID) 값이 1을 초과! > having 절로 gropu by에 조건 추가
2. 코드(MySQL)
select USER_ID, PRODUCT_ID
from ONLINE_SALE
-- 재구매 상품 데이터 먼저 추출 (1 초과) > 회원id, 상푸id를 찾아야함 group by having절 사용
group by USER_ID, PRODUCT_ID
having count(PRODUCT_ID) > 1
order by USER_ID asc, PRODUCT_ID desc;
with temp as (
select USER_ID, PRODUCT_ID, count(*) as COUNT
from ONLINE_SALE
group by USER_ID, PRODUCT_ID
having COUNT > 1
)
select USER_ID, PRODUCT_ID
from temp
order by USER_ID asc, PRODUCT_ID desc;
3. 활용예제
SELECT grade_level, gender, AVG(score) AS average_score
FROM students
GROUP BY grade_level, gender
HAVING AVG(score) > 80;
1. 학생 테이블에서 각 학년 및 성별에 대한 학생들의 평균 점수를 계산
2. 학년과 성별 열을 기준으로 결과를 그룹화
3. 각 그룹의 점수의 평균을 계산.
4. 평균 점수가 80보다 큰 그룹만 선택
80점 이상의 평균 점수를 가진 학년과 성별 그룹만 반환됩니다.
student_id | name | gender | grade_level | score |
1 | John | Male | 10 | 85 |
2 | Jane | Female | 10 | 75 |
3 | Alice | Female | 11 | 90 |
4 | Bob | Male | 11 | 80 |
5 | Carol | Female | 10 | 95 |
6 | David | Male | 11 | 85 |
7 | Emily | Female | 10 | 70 |
8 | Frank | Male | 11 | 75 |
9 | Grace | Female | 11 | 85 |
10 | Henry | Male | 10 | 90 |
- SQL -
grade_level | gender | average_score |
10 | Female | 86.67 |
11 | Female | 90 |
11 | Male | 82.5 |
728x90
반응형