bdfgdfg

SQL 재구매가 일어난 상품과 회원 리스트 구하기 본문

CS/SQL

SQL 재구매가 일어난 상품과 회원 리스트 구하기

marmelo12 2022. 12. 14. 22:31
반응형
SELECT USER_ID, PRODUCT_ID
    FROM ONLINE_SALE
    Group by User_ID, PRODUCT_ID
    Having Count(*) >= 2
    ORDER BY USER_ID ASC, PRODUCT_ID DESC;

이중 정렬과 함께 Group by를 이용한 문제.

 

 

Group by는 어떠한 칼럼을 기준으로 그룹화 한다. 보통 Group by는 집계함수(Count,Sum,Max등)과 같이 쓰임.

 

예로들어 어느 게임의 1등을 한 유저를 기록하는 테이블이 있다고 하자. 이 테이블을 통해 1등을 한 횟수가 높은 유저를 Top 10명만 추출해본다고 해보자. (사실 따로 카운트를 세는 칼럼을 추가하고 User_ID를 키로 택하는게 맞는 선택일듯)

 

테이블 명은 Game_1stRank? 칼럼은 User_ID, Score, Date정도만 있다고 보자. (1등을 한 유저만 기록하고 안전하게 저장이 되었단 가정)

SELECT User_ID, Count(*) AS Cnt
    FROM ONLINE_SALE
    Group by User_ID
    Order by Cnt DESC
    Limit 10​

뭐 이런식으로 짤 수 있다. 

 

이처럼 Group by는 어떠한 칼럼을 그룹화 시킬 수 있음.

 -> 실행순서 자꾸 까먹어서..  from → where → group by → having → select → order by!

 

그렇다면 위 문제처럼 Group by에 하나의 칼럼이 아니라 여러 칼럼이 들어오는 경우는 어떻게 될까?

각각 따로 그룹화를 지을까? 아니다. 

 

두 칼럼을 한번에 그룹화 하는 것이다.

 

예로들어서 지역, 성별이라는 칼럼이 있다고 해보자.

지역은 대구,서울,제주도 성별은 남성,여성이 있다.

 

나는 대구에 살면서 성별이 남성인 사람의 총 수를 구하고 싶다.

SELECT Count(*)
    FROM USER_INFO
    WHERE City = N'대구' AND SEX = N'Man'
    Group by City, SEX

where절이 먼저 실행되기에 걸러진 상태에서 Group by가 된다.

 

뭐 이런식으로 구할 수 있지 않을까.

 

오늘 복기할 것. 이중정렬, 쿼리 실행순서, Group by 여러 컬럼 처리방식.

 

 

반응형

'CS > SQL' 카테고리의 다른 글

SQL 아픈 동물찾기  (0) 2022.12.18
SQL 오프라인/온라인 판매 데이터 통합하기  (0) 2022.12.15
SQL 인기있는 아이스크림 (이중 정렬)  (0) 2022.12.13
Join  (0) 2022.09.28
Group By/Having/집계 함수  (0) 2022.09.27
Comments