본문 바로가기
DataBase/SQL

[SQL] 상품리뷰 데이터 분석 - 2

by skwkiix 2023. 10. 6.
728x90

이 포스팅은 <SQL로 맛보는 데이터 전처리 분석(https://www.yes24.com/Product/Goods/86544423)> 책의 5장을 학습하며 정리한 내용이다.

 

 

상품리뷰 데이터 분석 - 2

이전 포스팅에서는 Division 별 평점 분포, 평점 낮은 순서로 조회 등을 알아봤다.

이번 포스팅에서는 가장 낮은 평점을 Department별, 연령별로 다양하게 조회해본다.


데이터세트 컬럼 구조

Clothing ID 상품번호(Unique Value)
Age 리뷰 작성자의 연령
Title 리뷰 제목
Review Text 리뷰 내용
Rating 사용자가 제출한 평점
Recommend IND 상품 추천 여부
Positive Feedback Count 긍정적 피드백 수
Division Name 상품이 속한 Division (Initmates, General ...)
Department Name 상품이 속한 Department(Bottoms , jackets...)
Class Name 상품의 타입

 

연령별 Worst Department


  • Department 별, 연령대별 가장 낮은 점수 조회
SELECT 
	`department name`
    , FLOOR(AGE/10) * 10 AGEBAND -- 연령별
    , AVG(RATING) AS AVG_RATING  -- 평균 평점
FROM dataset2
GROUP BY 1, 2 -- 연령별, 평균 평점으로 그룹핑
HAVING AGEBAND = 10 -- HAVING: AGEBAND가 10인 그룹만 선택
ORDER BY 3 ASC
;

 

  • Department 별, 연령별 평균 평점과 순위
-- 윈도우 함수 ROW_NUMBER()를 사용하여 데이터를 순위를 매김
SELECT *
	, ROW_NUMBER() OVER(PARTITION BY AGEBAND ORDER BY AVG_RATING) RNK -- 연령대(AGEBAND)별로 순위를 계산
FROM (
	SELECT 
		`department name`
		, FLOOR(AGE/10) * 10 AGEBAND
		, AVG(RATING) AS AVG_RATING
	FROM dataset2
	GROUP BY 1, 2
) A -- subquery Alias
;

 

  • 연령별로 가장 낮은 평점을 준 Department 조회

위의 쿼리를 서브쿼리로 삽입하고, 메인쿼리에 RNK = 1이라는 조건을 준다.

SELECT * 
FROM (
	SELECT *
		, ROW_NUMBER() OVER(PARTITION BY AGEBAND ORDER BY AVG_RATING) RNK
	FROM (
		SELECT 
			`department name`
			, FLOOR(AGE/10) * 10 AGEBAND
			, AVG(RATING) AS AVG_RATING
		FROM dataset2
		GROUP BY 1, 2
	) A
) A
WHERE RNK = 1;

728x90