PostgreSQL/조인과 집계 데이터
PostgreSQL GROUP BY 절
DOGvelopers
2019. 11. 5. 21:28
반응형
실습 테이블 만들기 https://dog-developers.tistory.com/140
GROUP BY 란?
GROUP BY 절은 SELECT 문에서 반환된 행을 그룹으로 나눈다. 각 그룹에 대한 합계,평균,카운트 등을 계산할 수 있다.
기분문법
GROUP BY 절은 N개의 컬럼을 GROUP BY 하는경우 ,(콤마) 로 구분하며 GROUP BY 절은 FROM 또는 WHERE절 바로 뒤에 작성해야 합니다.
SELECT
COLUMN_1,
집계함수(COLUMN_2)
FROM
TABLE_NAME
GROUP BY COLUMN_1
실습
PAYMENT 테이블은 payment_id 가 기본키 이기때문에 유일한 값입니다. 하지만 customer_id(1명의 id) 는 여러개의 payment_id 를 가질수 있습니다.
- PAYMENT 테이블을 CUSTOMER_ID 기준으로 GROUP BY 한다.
SELECT
CUSTOMER_ID
FROM
PAYMENT
GROUP BY
CUSTOMER_ID;
단순한 GROUP BY는 아래와 같은 방법으로 조회 가능합니다.
SELECT
DISTINCT CUSTOMER_ID
FROM
PAYMENT
GROUP BY
CUSTOMER_ID;
- PAYMENT 테이블을 CUSTOMER_ID 기준으로 GROUP BY 하고 AMOUNT의 합계 값을 기준으로 내림차순 정렬 합니다.
SELECT
CUSTOMER_ID,
SUM(AMOUNT) AS AMOUNT_SUM
FROM
PAYMENT
GROUP BY
CUSTOMER_ID
ORDER BY
SUM(AMOUNT) DESC;
-- 동일한 방법
SELECT
CUSTOMER_ID,
SUM(AMOUNT) AS AMOUNT_SUM
FROM
PAYMENT
GROUP BY
CUSTOMER_ID
ORDER BY 2 DESC;
- PAYMENT 테이블을 STAFF_ID 기준으로 PAYMENT_ID의 카운트를 조회하며 STAFF_ID 기준으로 GROUP BY 합니다.
SELECT
STAFF_ID,
COUNT(PAYMENT_ID) AS COUNT
FROM
PAYMENT
GROUP BY
STAFF_ID;
- 위의 조건에서 STAFF의 이름까지 같이 조회하고 싶을때 JOIN을 사용합니다.
SELECT
A.STAFF_ID,
COUNT(A.PAYMENT_ID) AS COUNT,
B.FIRST_NAME,
B.LAST_NAME
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;
반응형