bdfgdfg
SQL 재구매가 일어난 상품과 회원 리스트 구하기 본문
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 |