카운트 기능으로 MySQL 그룹화

Abdul Basit 2024년2월15일
  1. MySQL의 ‘GROUP BY’ 구문
  2. MySQL의 GROUP BY 및 집계 함수
  3. MySQL의 GROUP BYHAVING
  4. MySQL의 여러 열에 대한 GROUP BY Count()
카운트 기능으로 MySQL 그룹화

이 자습서에서는 MySQL을 사용하는 집계 함수와 함께 SQL GROUP BY 절에 대해 설명합니다.

GROUP BY 절은 종종 COUNT(), SUM(), MIN(), MAX()와 같은 일부 집계 함수와 함께 사용됩니다. AVG().

MySQL의 ‘GROUP BY’ 구문

MySQL에서 다음 구문은 결과 뷰를 일부 열 이름으로 그룹화하는 데 사용됩니다.

SELECT column_name(s)
FROM table_name
WHERE condition
GROUP BY column_name(s);

MySQL의 GROUP BY 및 집계 함수

SQL에서 GROUP BY 절을 집계 함수와 함께 사용하여 특정 조건에 대한 레코드 수를 계산, 합계 또는 집계할 수 있습니다.

예 1: ORDERS 테이블이 있고 주문 날짜별로 그룹화된 주문 수를 계산하려고 한다고 가정합니다.

주문 테이블

다음 쿼리를 사용하여 이를 달성할 수 있습니다.

SELECT COUNT(OrderID) as Count, OrderDate
FROM Orders
GROUP BY OrderDate;

위의 쿼리는 OrderDate별로 그룹화하여 모든 주문을 검색하고 OrderDate당 단일 레코드를 표시합니다. 따라서 결과 보기의 각 레코드에는 OrderDate 및 이 날짜의 모든 OrderIDs 수가 포함됩니다.

쿼리의 출력은 다음과 같습니다.

날짜별 주문

예 2: 다음은 각 직원의 총 급여를 찾는 또 다른 예입니다. 결과를 검색하기 위해 다음 표를 사용한다고 가정합니다.

직원 테이블

SELECT e.NAME, SUM(e.SALARY)
FROM Employee e
GROUP BY e.NAME;

위의 쿼리에서는 먼저 테이블에서 모든 NAME을 선택한 다음 SUM 함수를 적용하여 각 이름에 대한 급여 합계를 계산합니다. 따라서 각 이름에 해당하는 단일 레코드만 있어야 합니다.

쿼리의 출력은 다음과 같아야 합니다.

이름별 총 급여 그룹 출력

MySQL의 GROUP BYHAVING

HAVING 절은 GROUP BY 절과 함께 사용하여 다음 쿼리에서 볼 수 있듯이 특정 조건에 따라 결과를 추가로 필터링할 수 있습니다.

SELECT e.NAME, SUM(e.SALARY)
FROM Employee e
GROUP BY e.NAME
HAVING SUM(SALARY)>44000;

이 쿼리는 위와 동일합니다. 그러나 유일한 차이점은 최종 급여 합계가 44000보다 큰 레코드만 포함하도록 급여를 추가로 필터링하기 위해 HAVING 절을 적용했다는 것입니다.

이 쿼리의 결과는 다음과 같습니다.

급여가 44000보다 큰 출력 이름

MySQL의 여러 열에 대한 GROUP BY Count()

COUNT() 집계 함수는 여러 열이 있는 GROUP BY 절과 함께 사용할 수 있습니다. 이 경우 결과는 첫 번째 열로 먼저 그룹화되고 그 다음에는 다음 열로 그룹화됩니다.

그런 다음 동일한 그룹화 값을 가진 모든 행이 하나로 계산되어 표시됩니다.

다음 표에서 특정 날짜에 특정 고객의 주문을 계산한다고 가정합니다.

주문 테이블

다음 쿼리를 사용하여 이를 수행할 수 있습니다.

Select CustomerId, OrderDate, COUNT(OrderId) as OrdersByCustomerByDate
FROM ORDERS
GROUP BY CustomerId, OrderDate;

모든 주문은 먼저 CustomerId로 그룹화된 다음 OrderDate로 그룹화됩니다. 그런 다음 CustomerIDOrderDate가 동일한 모든 레코드가 아래 쿼리 결과와 같이 단일 레코드로 계산되고 표시됩니다.

고객별 주문 날짜별 출력

$CustomerId = 1$인 고객은 2022년 7월 30일에 하나, 2022년 7월 31일 날짜에 두 개의 주문이 있습니다.

2022년 7월 31일에 대한 이 고객의 두 주문은 모두 $OrdersByCustomerByDate = 2$인 쿼리 결과의 두 번째 행에 집계됩니다. 나머지 기록에도 동일하게 적용됩니다.