count(*), distinct

Created by
  • 서경태
Created at
판매 데이터에서 재구매한 이력을 출력하는 문제에서 사용할 수 있다.
먼저, count(*)로 변수를 따로 만들어 회원과 상품마다 몇번의 결제가 일어났느니 파악한다.
select user_id, product_id from ( select user_id, product_id, count(*) purchase_count from online_sale group by user_id, product_id )a where purchase_count >= 2
그리고 서브쿼리에서 조건을 걸어 판매가 2번 이상 일어난 것을 조회한다.
또 하나는 재구매의 특성을 이용해 하나의 데이터를 2개로 나눈 것이다.
select distinct a.user_id, a.product_id from online_sale a join online_sale b on a.user_id = b.user_id and a.product_id = b.product_id and a.sales_date <> b.sales_date
재구매는 A유저가 상품 B를 2번 구매하는 행위이다. 동일한 사람이 동일한 상품을 구매하지만 날짜는 다르다.
그래서 데이터를 2개로 나누고 날짜라 다른것만 조회하도록 한다.
그럼 2번의 구매가 이루어져 (A, B) (A,B) 가 출력되는데 distinct를 넣어 중복값을 없애준다.
최종 출력은 (A, B) 한 번만 나온다.