목차
"Everything is available basically for free. You can learn anything you want for free." - Elon Musk의 인터뷰 중
머스크의 말처럼 모두 무료로 접할 수 있고 무엇이든 할 수 있으니..
무료로 접할 수 있는 정보들을 제게 맞게 최적화해서 정리해보려고 합니다.
이 글에선 GROUP BY와 HAVING에 대해 자세히 알아보겠습니다.
아래는 예시로 사용할 sales 테이블입니다.
id | product | price | quantity | sale_date |
1 | Apple | 1000 | 5 | 2023-01-01 |
2 | Banana | 500 | 10 | 2023-01-02 |
3 | Orange | 700 | 8 | 2023-01-03 |
4 | Apple | 1100 | 7 | 2023-01-04 |
5 | Banana | 450 | 15 | 2023-01-05 |
1. GROUP BY 사용
GROUP BY는 특정 열(column)의 값에 따라 데이터를 그룹화합니다.
SELECT product, SUM(price * quantity) as total_sales
FROM sales
GROUP BY product;
해석 > sales 테이블에서 product 기준으로 묶은 다음(그룹핑한 다음), product 별로 price와 quantity를 곱한 total_sales를 조회해줘
(쉽게는.. 상품별 총 판매 금액을 조회해줘)
결과)
product | total_sales |
Apple | 12700 |
Banana | 11750 |
Orange | 5600 |
2. GROUP BY, HAVING 사용
HAVING은 그룹화된 데이터에 조건을 적용할 때 사용합니다.
SELECT product, SUM(price * quantity) as total_sales
FROM sales
GROUP BY product
HAVING total_sales >= 6000;
해석 > sales 테이블에서 product 기준으로 묶은 다음, product 별로 price와 quantity를 곱한 total_sales를 구하고, 그 중에서 total_sales가 6000 이상인 값을 조회해줘
결과)
product | total_sales |
Apple | 12700 |
Banana | 11750 |
3. GROUP BY, HAVING, WHERE 사용
SELECT product, SUM(price * quantity) as total_sales
FROM sales
WHERE sale_date > '2023-01-03'
GROUP BY product
HAVING total_sales >= 5000;
해석 > sales 테이블에서 sale_date가 23년 1월 4일부터인 값들을 product 기준으로 묶은 다음, product 별로 price와 quantity를 곱한 total_sales를 구하고, 그 중에서 total_sales가 5000 이상인 값을 조회해줘
결과)
product | total_sales |
Apple | 7700 |
Banana | 6750 |
좀 더 디테일한 예시를 위해 예시 테이블을 하나 더 들어보겠습니다.
아래는 예시로 사용할 sales1 테이블입니다.
product | sale_date | store | price | quantity |
Apple | 2023-01-01 | Seoul | 1000 | 2 |
Apple | 2023-01-02 | Busan | 1000 | 1 |
Apple | 2023-01-03 | Busan | 1000 | 4 |
Banana | 2023-01-01 | Seoul | 500 | 5 |
Banana | 2023-01-02 | Busan | 500 | 3 |
Banana | 2023-01-03 | Seoul | 500 | 7 |
Orange | 2023-01-01 | Seoul | 2000 | 1 |
Orange | 2023-01-02 | Seoul | 2000 | 2 |
Orange | 2023-01-03 | Busan | 2000 | 1 |
4. GROUP BY 여러개 사용
SELECT product, store, SUM(price * quantity) as total_sales
FROM sales1
GROUP BY product, store;
해석 > sales1 테이블에서 product, store를 기준으로 묶은 다음, product와 store 별로 price와 quantity를 곱한 total_sales를 조회해줘(product로 묶고 그 다음에 store로 묶음)
결과)
product | store | total_sales |
Apple | Seoul | 2000 |
Apple | Busan | 5000 |
Banana | Seoul | 6000 |
Banana | Busan | 1500 |
Orange | Seoul | 6000 |
Orange | Busan | 2000 |
5. GROUP BY, HAVING 여러개 사용
SELECT product, store, SUM(price * quantity) as total_sales, SUM(quantity) as total_quantity
FROM sales1
GROUP BY product, store
HAVING total_sales >= 3000 AND total_quantity >= 5;
해석 > sales1 테이블에서 product, store를 기준으로 묶은 다음, product와 store 별로 price와 quantity를 곱한 total_sales를 구하고 그 중에서 total_sales가 3000 이상이면서 total_quantity가 5 이상인 값을 알려줘
결과)
product | store | total_sales | total_quantity |
Apple | Busan | 5000 | 5 |
Banana | Seoul | 6000 | 12 |
6. 참고 문헌
통계 교육원 SQL 강의: 데이터 분석을 위한 SQL 입문(2023) - https://sti.kostat.go.kr/coresti/site/main.do
부스트코스 SQL 강의: 기초 데이터 분석을 위한 핵심 SQL - https://www.boostcourse.org/
'SQL > SQL 스터디' 카테고리의 다른 글
산술 연산자 파헤치기 - 문과생 SQL 독학 시리즈6 (0) | 2023.04.30 |
---|---|
ORDER BY 파헤치기 - 문과생 SQL 독학 시리즈5 (0) | 2023.04.30 |
Where 파헤치기 - 문과생 SQL 독학 시리즈3 (0) | 2023.04.29 |
Select, 데이터 조회 방법 이해하기 - 문과생 SQL 독학 시리즈2 (0) | 2023.04.28 |
DBMS, SQL, 그리고 SQL 명령어 이해하기 - 문과생 SQL 독학 시리즈1 (0) | 2023.04.28 |
댓글