SQL과 데이터베이스 - 조인과 집계 데이터 : GROUP BY절
카테고리 : SQL >> Sqlgrammar
GROUP BY절
이 학습은 패스트캠퍼스의 올인원 패키지 : 모두를 위한 SQL/DB 강의를 듣고 복습하는 내용입니다.
GROUP BY절 설명 및 특징
- GROUP BY 절은 SELECT 문에서 반환된 행을 그룹으로 나눈다. 각 그룹에 대한 합계, 평균, 카운트 등을 계산할 수 있다.
GROUP BY절 문법
SELECT
COLUMN_1 -- GROUP BY 컬럼 기재
, 집계함수(COLUMN_2) -- 집계함수 사용
FROM
TABLE_NAME
GROUP BY COLUMN_1; -- GROUP BY 절 기재, N개의 컬럼을 GROUP BY 하는 경우 ',' 구분,
-- GROUP BY 절은 FROM 또는 WHERE절 바로 뒤에 나타나야 함
GROUP BY절 실습
- 실습 테이블
SELECT * FROM PAYMENT;
- 실습 1 (단순 group by)
-- 중복값이 제거된 customer_id를 추출
-- 1. GROUP BY 이용
SELECT
CUSTOMER_ID
FROM
PAYMENT
GROUP BY CUSTOMER_ID;
-- 2. DISTINCT 이용
SELECT
DISTINCT CUSTOMER_ID
FROM
PAYMENT;
=> PAYMENT 테이블은 원래 중복된(다수의) customer_id를 가질 수 있지만, group by절이나 distinct를 활용해서 중복을 제거할 수 있다.
- 실습 2 (합계 구하기 + 정렬)
-- 거래액이 가장 많은 고객순으로 출력(3가지 방법 중 2번째 방법이 일반적, 숫자 넘버링은 추천하지 않음)
-- 1. alias를 이용하지 않고 order by 하는방법
SELECT
CUSTOMER_ID
, SUM(AMOUNT) AS AMOUNT_SUM
FROM
PAYMENT
GROUP BY CUSTOMER_ID
ORDER BY SUM(AMOUNT) DESC;
-- 2. alias를 이용하여 order by 하는방법
SELECT
CUSTOMER_ID
, SUM(AMOUNT) AS AMOUNT_SUM
FROM
PAYMENT
GROUP BY CUSTOMER_ID
ORDER BY AMOUNT_SUM DESC;
-- 3. 숫자 넘버링을 통한 order by
SELECT
CUSTOMER_ID
, SUM(AMOUNT) AS AMOUNT_SUM
FROM
PAYMENT
GROUP BY CUSTOMER_ID
ORDER BY 2 DESC;
=> customer 별 amount 합계를 내림차순 (거래액이 가장 많은 고객순)
=> alias를 지정해주었으면 활용하는 방법이 일반적이고, 넘버링은 헷갈릴 수 있기 때문에 추천하지 않는다.
* 실습 2를 통해 나온 결과를 통해 고객 정보 확인 (customer_id = 148)
SELECT * FROM CUSTOMER WHERE CUSTOMER_ID = 148;
- 실습 3 (카운트 구하기)
-- 각 스텝이 몇 번의 결제를 처리했느냐?
SELECT
STAFF_ID ,
COUNT(PAYMENT_ID) AS COUNT
FROM
PAYMENT
GROUP BY STAFF_ID;
* 이름까지 뽑고 싶을 때
SELECT * FROM STAFF;
=> 스태프는 2명
-- 1.
SELECT
A.STAFF_ID ,
B.STAFF_ID ,
B.FIRST_NAME ,
B.LAST_NAME ,
COUNT(A.PAYMENT_ID) AS COUNT
FROM
PAYMENT A, STAFF B
WHERE A.STAFF_ID = B.STAFF_ID
GROUP BY A.STAFF_ID, B.STAFF_ID, B.FIRST_NAME, B.LAST_NAME;
-- 2.
SELECT
A.STAFF_ID ,
B.STAFF_ID ,
B.FIRST_NAME ,
B.LAST_NAME ,
COUNT(A.PAYMENT_ID) AS COUNT
FROM
PAYMENT A, STAFF B
WHERE A.STAFF_ID = B.STAFF_ID
GROUP BY A.STAFF_ID, B.STAFF_ID;