[MySQL/MariaDB] GROUP BY에서 꼭 알아야하는 SELECT 함수 5가지 추천

[MySQL/MariaDB] GROUP BY에서 꼭 알아야하는 SELECT 함수 5가지 추천해드리겠습니다.

GROUP BY 절은 SELECT 문에서 그룹 결과 집합을 반환합니다. 이 절은 집계 함수와 함께 자주 사용됩니다.
각 그룹에 대한 통계를 계산함으로써 더욱 명확한 데이터 정보를 만들 수 있습니다. 예를 들어, GROUP BY 절을 사용하여 기업의 특정 날짜 범위 내에서의 판매량을 계산할 수 있습니다. 이를 통해 기업은 판매 추세를 파악하고, 예측 모델을 개발하는 데 도움을 받을 수 있습니다.

AVG, COUNT, MAX, MIN, SUM 등 다양한 함수를 사용하여 데이터를 요약하고, 통계적 분석을 수행할 수 있습니다. 이를 통해 기업은 매출, 비용, 이익 등을 파악하고, 경영 전략을 수립하는 데 도움을 받을 수 있습니다. 현업에서 사업부와 마케팅 부서에서 다양한 데이터 정보를 이용하여 효율적으로 분석하고 의사 결정을 내리는데 매우 중요한 요소가 됩니다.

아래 샘플 쿼리는 classicmodels db를 다운로드 받아 사용한 예제입니다.

classicmodels db 관련은 이곳-> “[MySQL/Mariadb] Select JOIN 쿼리 사용하기” 에서 확인해주세요.

1.GROUP BY SUM 합계

payments 테이블 정보를 이용하여 group by 쿼리 문을 작성해보겠습니다. 아래와 같이 2004년 1월과 2월 정보가 있습니다.

select * from payments
where paymentDate >= '2004-01-01' and paymentDate < '2004-03-01' order by paymentDate;

+--------------+-----------+-----------+--------+
|customerNumber|checkNumber|paymentDate|amount  |
+--------------+-----------+-----------+--------+
|146           |FU793410   |2004-01-16 |49614.72|
|177           |CI381435   |2004-01-16 |47177.59|
|347           |DG700707   |2004-01-16 |21053.69|
|406           |HJ217687   |2004-01-28 |49165.16|
|141           |HJ32686    |2004-01-30 |59830.55|
|489           |PO860906   |2004-01-30 |7310.42 |
|256           |EP227123   |2004-02-06 |5759.42 |
|458           |NA377824   |2004-02-06 |22162.61|
|473           |LL427009   |2004-02-06 |7612.06 |
|475           |PB951268   |2004-02-06 |36070.47|
|166           |LA318629   |2004-02-28 |22474.17|
|487           |PT550181   |2004-02-28 |12573.28|
+--------------+-----------+-----------+--------+

위 데이터를 paymentDate group by를 이용해 일별 amount 합계 정보를 구해보겠습니다.

SELECT paymentDate, 
SUM(amount) AS amount
FROM payments
WHERE paymentDate >= '2004-01-01'
  AND paymentDate < '2004-03-01'
GROUP BY paymentDate;

+-----------+---------+
|paymentDate|amount   |
+-----------+---------+
|2004-01-16 |117846.00|
|2004-01-28 |49165.16 |
|2004-01-30 |67140.97 |
|2004-02-06 |71604.56 |
|2004-02-28 |35047.45 |
+-----------+---------+

2.COUNT 함수

SELECT paymentDate, 
COUNT(paymentDate) AS count
FROM payments
WHERE paymentDate >= '2004-01-01'
  AND paymentDate < '2004-03-01'
GROUP BY paymentDate;

위 쿼리는 “payments” 테이블에서 ‘2004-01-01’부터 ‘2004-03-01’ 이전까지의 날짜 범위 내에서 각 날짜별로 결제가 이루어진 횟수를 구하는 코드입니다.

SELECT paymentDate, COUNT(paymentDate) AS count:
여기서는 “paymentDate” 열의 값을 선택하고, COUNT() 함수를 사용하여 각 날짜별로 결제가 이루어진 횟수를 계산합니다. 계산 결과는 “count”라는 별칭을 가지게 됩니다.

FROM payments: 이 부분은 데이터를 검색할 대상 테이블을 지정하는 부분입니다. 여기서는 “payments” 테이블에서 데이터를 가져옵니다.

WHERE paymentDate >= ‘2004-01-01’ AND paymentDate < ‘2004-03-01’:
이 부분에서는 “paymentDate”가 ‘2004-01-01’ 이상이고 ‘2004-03-01’ 미만인 날짜만을 대상으로 쿼리를 실행합니다. 즉, ‘2004-01-01’부터 ‘2004-02-29’까지의 날짜 범위의 데이터만 가져옵니다.

GROUP BY paymentDate: 이 부분은 GROUP BY 절로, 결과를 “paymentDate” 열 값에 따라 그룹화합니다. 이로 인해 각 날짜별로 그룹이 형성되며, COUNT() 함수는 각 그룹에 대해 결제 횟수를 계산합니다.

3.MAX, MIN 함수

SELECT paymentDate,
       MAX(customerNumber) AS '가장 큰 값',
       MIN(customerNumber) AS '가장 작은 값'
FROM payments
WHERE paymentDate >= '2004-01-01'
  AND paymentDate < '2004-03-01'
GROUP BY paymentDate;

+-----------+------+-------+
|paymentDate|가장 큰 값|가장 작은 값|
+-----------+------+-------+
|2004-01-16 |347   |146    |
|2004-01-28 |406   |406    |
|2004-01-30 |489   |141    |
|2004-02-06 |475   |256    |
|2004-02-28 |487   |166    |
+-----------+------+-------+

`MAX` 함수는 그룹화된 데이터 중에서 가장 큰 값을 반환합니다.
`MIN` 함수는 그룹화된 데이터 중에서 가장 작은 값을 반환합니다.

4.AVG 함수 평균 값

SELECT paymentDate,
       AVG(amount) AS '평균 값'
FROM payments
WHERE paymentDate >= '2004-01-01'
  AND paymentDate < '2004-03-01'
GROUP BY paymentDate;

+-----------+------------+
|paymentDate|평균 값       |
+-----------+------------+
|2004-01-16 |39282.000000|
|2004-01-28 |49165.160000|
|2004-01-30 |33570.485000|
|2004-02-06 |17901.140000|
|2004-02-28 |17523.725000|
+-----------+------------+

위의 코드는 payments 테이블에서 2004년 1월 1일부터 2004년 3월 1일 사이의 날짜별로 평균 amount 값을 구하는 쿼리입니다.

GROUP BY 구문을 사용하여 paymentDate 필드를 기준으로 그룹화합니다. 이 구문을 사용하면 날짜별로 amount 값을 구할 수 있습니다. AVG 함수를 사용하여 각 그룹의 평균 amount 값을 계산합니다.

5.GROUP_CONCAT

SELECT paymentDate,
       GROUP_CONCAT(customerNumber)  AS '회원코드 결합'
FROM payments
WHERE paymentDate >= '2004-01-01'
  AND paymentDate < '2004-03-01'
GROUP BY paymentDate;

+-----------+---------------+
|paymentDate|회원코드 결합      |
+-----------+---------------+
|2004-01-16 |146,177,347    |
|2004-01-28 |406            |
|2004-01-30 |141,489        |
|2004-02-06 |256,458,473,475|
|2004-02-28 |166,487        |
+-----------+---------------+

GROUP_CONCAT 함수는 GROUP BY 구문으로 그룹화된 결과를 문자열로 결합하는 데 사용됩니다. 이 함수는 일반적으로 문자열을 그룹화하거나 두 열을 결합해야 하는 경우에 사용됩니다. 예를 들어, GROUP_CONCAT 함수를 사용하여 각 그룹의 이름을 쉼표로 구분된 단일 문자열로 결합할 수 있습니다.

다른 Mysql 쿼리 정보

[MySQL] 문자열 함수 LEFT, RIGHT, CONCAT, SUBSTRING, REPLACE, TRIM, UPPER, LOWER 8가지 사용 방법

Leave a Comment