web developer

[sql] GROUP BY 본문

SQL

[sql] GROUP BY

trueman 2023. 8. 20. 00:24
728x90
728x90

GROUP BY


SQL은 집합 지향적 언어입니다.
그렇기 때문에 SQL에는 집합을 조작할 수 있는 구문이 많이 있습니다.


가장 대표적인 집합 지향적 구문이 GROUP BY입니다.

 

  • GROUP BY는 GROUP BY `열 이름`과 같은 문법으로 사용됩니다.
  • GROUP BY를 사용하면 전체 집합을 지정한 열을 기준으로 분류하고 집약합니다.

예를 들어 전체 유저 그룹에 대해 GROUP BY gender로 지정한다면 각 gender 별로 그룹이 분류됩니다.
앞에서 SQL은 기본적으로 다수의 행을 반환한다고 했는데 여기에 GROUP BY `열 이름`을 추가하면 전체 집합의 모든 행을 지정한 열의 값을 기준으로 분류한 뒤 각 집합을 하나의 행으로 집약합니다.


다음 예시를 보면 genre에 대해 GROUP BY 했을 경우,
동일한 genre 값을 갖는 다수의 행을 하나의 집합으로 묶어 각 집합 별 qty의 합(SUM)을 구합니다

SELECT genre, SUM(qty) AS total
FROM books
GROUP BY genre

GROUP BY를 통해 반환되는 행의 수는 특정 열을 기준으로 분류한 집합의 수와 같습니다.

위의 예시에서 전체 집합을 genre 별로 구분하면 adventure, fantasy, romance 각각 세 개의 집합으로 분류되고, 이는 오른쪽 결과에 반환되는 3개의 행의 개수와 같습니다.

 

GROUP BY를 사용할 때 명심해야 되는 점은 SELECT 구문에는 GROUP BY의 기준이 되는 열 또는 집계 함수만 포함될 수 있습니다.


책을 genre 별로 구분한 위의 예시를 보면 SELECT 구문에 GROUP BY 기준인 genre와 SUM(qty) 집계 함수가 있는데, 위 쿼리의 SELECT 안에 title을 추가하면 어떻게 될까요?

 

장르별로 집약된 책 집합은 다수의 책들로 이루어져 있습니다.

 

예를 들어 adventure 집합 안에는 book1과 book4가 포함되어 있습니다.
GROUP BY를 통해 집합을 집약하여 하나의 행으로 표현했지만, 해당 행은 집합의 데이터입니다.

 

따라서 장르 별로 집약된 집합에서 하나의 title을 특정할 수 없습니다.

 

그렇기 때문에 SELECT 안에 title을 추가한 SQL은 정상적으로 동작하지 않습니다.
하나의 title을 출력하고싶다면 MIN() 또는 MAX()를 이용한 특수한 조건을 지정해야 합니다.


출처 : https://www.qu3vipon.com/sql-guide

 

초보자를 위한 SQL 가이드

Intro

www.qu3vipon.com

 

728x90
728x90

'SQL' 카테고리의 다른 글

[sql] LAG, LEAD 함수  (1) 2023.08.22
[sql] sql, database, dbms, schema 개념 이해하기  (0) 2022.12.10
Comments