개키우는개발자 : )

PostgreSQL GROUP BY 절 본문

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

 

실습

table erd

PAYMENT 테이블은 payment_id 가 기본키 이기때문에 유일한 값입니다. 하지만 customer_id(1명의 id) 는 여러개의 payment_id 를 가질수 있습니다. 

 

- PAYMENT 테이블을 CUSTOMER_ID 기준으로 GROUP BY 한다.

SELECT
	CUSTOMER_ID
FROM
	PAYMENT
GROUP BY
	CUSTOMER_ID;

실습1

단순한 GROUP BY는 아래와 같은 방법으로 조회 가능합니다.

SELECT
	DISTINCT CUSTOMER_ID
FROM
	PAYMENT
GROUP BY
	CUSTOMER_ID;

실습2

 

- 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;

실습3

- PAYMENT 테이블을 STAFF_ID 기준으로 PAYMENT_ID의 카운트를 조회하며 STAFF_ID 기준으로 GROUP BY 합니다.

SELECT
	STAFF_ID,
	COUNT(PAYMENT_ID) AS COUNT
FROM
	PAYMENT
GROUP BY
	STAFF_ID;

실습4

- 위의 조건에서 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;

실습5

 

반응형

'PostgreSQL > 조인과 집계 데이터' 카테고리의 다른 글

PostgreSQL GROUPING SET 절  (0) 2019.11.05
PostgreSQL HAVING 절  (0) 2019.11.05
PostgreSQL NATURAL 조인  (0) 2019.11.05
PostgreSQL CROSS 조인  (0) 2019.11.03
PostgreSQL FULL OUTER 조인  (0) 2019.11.03
Comments