언빌리버블티
[MySQL] SQL 그룹별로 요약하기 ( GROUP BY , HAVING ~ ORDER BY ) 본문
멋쟁이 사자처럼 AI스쿨
데이터리안 Special Lecture : 일단 해보는 SQL - 4
- SQL의 groupby 와 묶인 데이터에서 원하는 정보를 필터링하는 HAVING 구문에 대해 알아보았다.
- 앞전과 포스트와 동일하게 Waiter's Tips DB를 사용했다 .
✨✨✨SQL 코드 작성의 순서 및 실행 순서✨✨✨
#---코드 작성------# #-----코드 실행-----#
SELECT 컬럼명 ---------------------- (5)
FROM 테이블명 ---------------------- (1)
WHERE 테이블 조건 ------------------ (2)
GROUP BY 컬럼명 -------------------- (3)
HAVING 그룹 조건 ------------------- (4)
ORDER BY 컬럼명 -------------------- (6)
- FROM : 구문이 들어오면 테이블을 가장 먼저 확인
- WHERE : 테이블명을 확인했으니, 테이블에서 주어진 조건에 맞는 데이터들을 추출
- GROUP BY : 조건에 맞는 데이터가 추출되었으니, 공통적인 데이터들끼리 묶어 그룹 생성
- HAVING : 공통적인 데이터들이 묶여진 그룹 중, 주어진 주건에 맞는 그룹들을 추출.
- SELECT : 최종적으로 추출된 데이터들을 조회
- ORDER BY : 추출된 데이터들을 정렬.
Group 별로 데이터 요약하기
GROUP BY : 그룹으로 데이터 묶기
: WHERE 구문을 통해 테이블에서 주어진 조건에 맞게 추출된 데이터들을 공통된 데이터끼리 묶는다.
따라서 코드 작성 순서는 WHERE -> GROUP BY
- 날짜 별 매출액과 팁 합계를 출력하자.
- 같은 날짜(day) 를 가지는 행끼리 묶인 뒤 합계를 출력한다 !
SELECT day, SUM(total_bill), SUM(tip)
FROM tips
GROUP BY day

- 요일과 시간대 별로 묶은 다음, 매출액의 합계를 출력하자.
- group by로 묶을 변수를 콤마로 구분한다.
SELECT day, SUM(total_bill), SUM(tip)
FROM tips
GROUP BY day, time

HAVING : Group by로 요약한 데이터에서 원하는 정보 필터링하기
-
- Group By 로 요약된 데이터에 조건을 걸어서 필터링한다.
요일 별 매출액 합계를 구한 뒤, 매출액이 1000불 미만인 날은 출력 결과에서 제외시키자.
SELECT day, SUM(total_bill)
FROM tips
GROUP BY day
HAVING SUM(total_bill) >= 1000


남성 매출액 합계를 구한 뒤 , 매출액이 200불 미만인 날을 출력 결과에서 제외시키자.
SELECT sex, day, SUM(total_bill)
FROM tips
WHERE sex = 'Male'
GROUP BY day
HAVING SUM(total_bill) >= 200


- 직원 성별이 남자인 데이터 의 매출액 합계 데이터를 요일 별로 출력한다. ( 조건 추출 및 데이터 요약 )
- 총 매출액 합계가 200이 되지 않는 날은 제외하고 본다. (결과 필터링)
ORDER BY : 요약 정보를 정렬하기
- 추출된 데이터들을 정렬한다.
- 최종 결과물을 정렬하는 것이기 때문에 코드의 마지막 LIMIT 이전에 위치한다.
남자와 여자 요일 별 매출액 합계 데이터에서 매출액이 가장 많았던 날 TOP 3를 출력하자.
- 매출액이 500 미만인 데이터는 제외하고 본다.
# 남자
SELECT day, SUM(total_bill) AS rev
FROM tips
WHERE sex = 'Male'
GROUP BY day
HAVING SUM(total_bill) >= 500
ORDER BY rev DESC
limit 3

# 여자
SELECT day, SUM(total_bill) AS rev
FROM tips
WHERE sex = 'Female'
GROUP BY day
HAVING SUM(total_bill) >= 500
ORDER BY rev DESC
limit 3

요약
SELECT day , SUM(total_bill) AS total
FROM tips
WHERE 조건
GROUP BY day
HAVING -- total에 대한 결과 출력 조건
ORDER BY total DESC -- total 출력 시 정렬
LIMIT 1 -- 만약 LIMIT를 쓰고 싶다면 ORDER BY
'Language > MySQL' 카테고리의 다른 글
[MySQL] SQL CASE~WHEN을 활용한 피벗테이블 만들기 (0) | 2022.10.14 |
---|---|
[MySQL] SQL 조건문 (IF, CASE WHEN ~ THEN) (0) | 2022.10.14 |
[MySQL] SQL 집계함수 : SUM(), COUNT(), AVG() ... (0) | 2022.10.14 |
[MySQL] SQL 비교 연산자 및 함수 (LIKE, BETWEEN, IS NULL, DISTINCT, SUBSTRING, ROUND) (0) | 2022.10.13 |
[MySQL] SQL기초 - SELECT, FROM, ORDER BY (0) | 2022.10.02 |
Comments