본문 바로가기
[파이썬]/데이터베이스

[MariaDB] 그룹 함수(Group By, Having) + 컴파일 순서

by sung min_Kim 2023. 11. 24.
그룹 함수(집합함수)


여러 행의 값을 집계하여 하나의 결과를 반환하는 함수


· 그룹 함수를 사용하는 이유는 ?

 

 

  •  데이터 요약 : 수많은 데이터 중에서 원하는 정보를 획득하기 위해 데이터를 요약한다. 예를 들어, 총매출 금액을 알고 싶다면 'SUM' 함수를 사용하여 매출 금액을 합산할 수 있다.


  • 통계 정보 제공 : AVG, MAX, MIN 등의 함수는 데이터의 평균, 최대, 최소값 등 통계 정보를 제공한다. 이를 통해 데이터의 특성을 파악하거나 분석하는데 도움이 된다.


  • 데이터 그룹화 : 'Gruop By'절과 함께 사용하면, 특정 기준에 따라 데이터를 그룹화하고, 그룹별로 데이터 정보를 요약할 수 있다. 예를 들어, 회원별에 대한 알고 싶다면, '회원'을 특정 기준으로 Group By를 하여 해당 정보를 출력할 수 있다. 

 따라서, 그룹 함수는 데이터를 요약하고, 통계 정보를 제공하며, 데이터를 그룹화하는 등 다양한 목적으로 사용한다. 이는 데이터 분석 및 관리에 매우 중요한 역할을 한다.

 


· 그룹 함수의 종류

 

 

  • Count() : 해당 컬럼의 행 수를 반환한다. NULL 값은 포함되지 않는다. NUll 값을 포함하지 않는 이유는, Count는 값이 존재하는 행의 수를 세기 때문이다.

  • Sum() : 컬럼의 총합을 반환한다. NULL 값은 무시하고 계산한다.

  • Min() : 컬럼의 최소값을 반환한다. NULL 값은 무시하고 계산한다.

  • Max() : 컬럼의 최대값을 반환한다. NULL 값은 무시하고 계산한다.

  • Avg() : 컬럼의 평균값을 반환한다. NULL 값은 무시하고 계산한다.

 

그룹 함수의 종류


 Null이 존재하는 컬럼의 경우 Null 체크를 해야 한다. Not Null이 조건인 컬럼은 제외해도 무관하다.
 (Null의 개념과 Null 체크에 관하여 궁금하신 분들은 아래의 글을 참고하시길 바란다.)
 2023.11.24 - [[파이썬]/데이터베이스] - [MariaDB] Null, Null 체크(+nvl함수)

 

[MariaDB] Null, Null 체크(+nvl함수)

Null, Not Null 데이터의 부재, 데이터의 필수 · 'Null'과 'Not Null' Null과 Not Null은 데이터의 '값의 유무'를 표현하는 데 사용되는 키워드이며, 데이터의 무결성을 보장하는 데 중요한 역할을 수행한다.

sungmin93.tistory.com

 


· 그룹 함수에 대한 조건


 일반 함수의 경우에는 Where절을 사용하여 조건을 제한하였으나, 그룹 함수의 경우에는 'Group By'절과 'Having'절을 사용하여 조건을 제한한다. 

  • Group By절 : SQL에서 Group By절은 특정 컬럼의 값에 따라 데이터를 그룹화하는 데 사용된다. 그룹 함수는 이렇게 그룹화된 각 그룹에 대해 동작을 처리한다. 만약 Group By절 없이 그룹 함수를 사용한다면, 전체 행이 하나의 그룹으로 간주되어 그룹 함수의 결과가 하나만 반환된다. 일반적으로 '~별'이라는 개념적 용어가 사용되면 Group By절을 사용한다.

    규칙 : Group By절을 통해 그룹화 한 컬럼들은 별칭을 사용하면 오류가 발생하기 때문에 원형 그대로 사용하며, 조회(Select)할 컬럼에 기입하여 준다.

ex) 회원들의 각 취미별 수를 조회하기

그룹 함수_Group BY절_사용 안한 결과

  각 취미별로 몇 명의 회원이 있는지 정보를 조회하려 한다. 하지만, 'Group By'절을 사용하지 않아 그룹화가 이루어지지 않았고, 사용한 그룹 함수(Count)는 그룹화된 각 그룹에 대한 동작을 제대로 수행하지 못했다.
 따라서 취미(mem_like) 컬럼에 대한 전체 행들이 하나의 그룹으로 간주되어 하나의 결과만 출력하게 된다.


그룹 함수_Group BY절_사용한 결과

 취미(mem_like) 컬럼에 'Group By절'을 사용함으로써 해당 컬럼을 그룹화하였다. 그룹 함수(Count)는 취미 컬럼에 대한 각 그룹별 연산을 수행한다. 이로써 회원들의 각 취미별 수에 대한 결과를 얻을 수 있다.



  • Having절 : SQL에서 Having절은 그룹 함수를 이용한 조건을 지정하는 데 사용된다. Where절은 각 행의 조건을 검사하고, 그 결과에 따라 행을 필터링한다. 그러나 그룹 함수의 결과에 대한 조건을 지정하려면 반드시 Having절을 사용해야 한다. 

 

ex) 회원별 평균 마일리지가 1000점 이상인 회원의 이름과 마일리지를 조회하기

그룹 함수_Having절_사용안한 결과

  '~별' 개념이 붙은 회원(mem_id) 컬럼을 그룹화하여, 1000점 이상의 마일리지(mem_mileage)를 보유한 회원을 조회하려 한다. 그러나 그룹 함수(AVG)에 대한 조건을 Where절을 통해 제한하려 하자 오류가 발생한 모습이다. 일반 함수에 대해 조건을 제한하는 Where절은 그룹 함수의 조건을 제한할 수 없다. 


그룹 함수_Having절_사용한 결과

 '회원별(Group By(mem_id)) 평균 마일리지가 1000점 이상'이라는 조건(Having AVG(mem_mile
age) >= 1000)을 만족하기 위해 그룹 함수(AVG)를 사용하여 조건을 제한하였다.

 이처럼 그룹 함수(AVG)를 사용하여 조건을 제한할 때에는 반드시  Having절사용하여야 한다.

 이로써 회원별로 보유한 마일리지가 1000점 이상인 회원들에 대한 정보를 조회할 수 있다.


· 컴파일(해석) 처리 순서 <국제 표준>

 

  1. Select

  2. From 테이블

  3. Where ~ And

  4. Group By

  5. Having

  6. Select 컬럼들

  7. Order By

 



컬럼은 Group By절을 통해 그룹화되며, 그룹 함수는 그룹화 된 각 그룹별로 값을 집계하여 하나의 결과값을 반환한다.

만약 Group By절을 사용하지 않고 그룹 함수를 이용한 경우에는 해당 그룹을 하나로 취급하여 전체 행에 대한 결과를 하나만 반환하게 된다.


그룹화 된 각 그룹에 대해 그룹 함수가 포함된 제한 조건을 부여해야 한다면, 반드시 Having절을 사용하여야 하며, 그렇지 않을 경우 오류가 발생하게 된다.


이로써 그룹 함수와 그룹 함수에 대한 조건을 사용함으로써 데이터를 요약하고, 그룹화하여 통계 수치를 내는 등의 데이터 분석 및 관리 작업을 수행할 수 있다.


'[파이썬] > 데이터베이스' 카테고리의 다른 글

[MariaDB] 별칭(식별자)  (1) 2023.11.25
[MariaDB] 연산자  (1) 2023.11.25
[MariaDB] Null, Null 체크(+nvl함수)  (4) 2023.11.24
[MariaDB] 서브쿼리(Sub Query) + SQL 컴파일 순서  (1) 2023.11.23
[MariaDB] CRUD  (0) 2023.11.21