오늘도 개발

GROUP BY, 집계함수 본문

웹 프로그래밍/DB

GROUP BY, 집계함수

Sueeeeeee 2022. 10. 3. 23:20

0. 예시로 들 테이블

products, product_images, charges, product_charges

 

1. GROUP BY를 사용하지 않았을 때

그냥 테이블을 join한 결과는 다음과 같다.

SELECT * FROM products
LEFT JOIN product_images ON product_images.product_id = products.id;

 

2. GROUP BY와 집계함수

GROUP BY

join한 테이블의 여러 행을 하나로 묶어주는 키워드. 

위 예시에서는 각 상품을 한 행으로 묶어서 볼 수 있다. (ex. 1번 상품 한줄, 2번 상품 한줄.. 이런 식으로)

 

하지만 GROUP BY는 집계 함수 없이 사용하면 오류가 난다.

예를 들어 product 1은 이미지가 두 개 있는데, 이것을 어떤 방식으로 한 행으로 합칠지 컴퓨터는 모른다.

그래서 집계 함수를 같이 사용해서 행을 어떤 식으로 합치라고 알려줘야 한다.

 

Aggregate function(집계 함수)

행을 어떻게 묶을 지 정해주는 함수,

COUNT(), MAX(), MIN(), SUM(), GROUP_CONCAT(), JSON_ARRAYAGG() 등이 있다.

(GROUP_CONCAT은 스트링으로 만들어 묶고, JSON_ARRAYAGG는 json array 형태로 만들어 묶는다.)

SELECT
   products.id, products.title, products.description, products.price,
   JSON_ARRAYAGG(product_images.url)
FROM products 
LEFT JOIN product_images ON products.id = product_images.product_id
GROUP BY products.id; -- 상품의 아이디를 기준으로 행을 묶음