카운트 기능으로 MySQL 그룹화
- MySQL의 ‘GROUP BY’ 구문
-
MySQL의
GROUP BY및 집계 함수 -
MySQL의
GROUP BY및HAVING절 -
MySQL의 여러 열에 대한
GROUP BY Count()
이 자습서에서는 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 BY 및 HAVING 절
HAVING 절은 GROUP BY 절과 함께 사용하여 다음 쿼리에서 볼 수 있듯이 특정 조건에 따라 결과를 추가로 필터링할 수 있습니다.
SELECT e.NAME, SUM(e.SALARY)
FROM Employee e
GROUP BY e.NAME
HAVING SUM(SALARY)>44000;
이 쿼리는 위와 동일합니다. 그러나 유일한 차이점은 최종 급여 합계가 44000보다 큰 레코드만 포함하도록 급여를 추가로 필터링하기 위해 HAVING 절을 적용했다는 것입니다.
이 쿼리의 결과는 다음과 같습니다.

MySQL의 여러 열에 대한 GROUP BY Count()
COUNT() 집계 함수는 여러 열이 있는 GROUP BY 절과 함께 사용할 수 있습니다. 이 경우 결과는 첫 번째 열로 먼저 그룹화되고 그 다음에는 다음 열로 그룹화됩니다.
그런 다음 동일한 그룹화 값을 가진 모든 행이 하나로 계산되어 표시됩니다.
다음 표에서 특정 날짜에 특정 고객의 주문을 계산한다고 가정합니다.

다음 쿼리를 사용하여 이를 수행할 수 있습니다.
Select CustomerId, OrderDate, COUNT(OrderId) as OrdersByCustomerByDate
FROM ORDERS
GROUP BY CustomerId, OrderDate;
모든 주문은 먼저 CustomerId로 그룹화된 다음 OrderDate로 그룹화됩니다. 그런 다음 CustomerID와 OrderDate가 동일한 모든 레코드가 아래 쿼리 결과와 같이 단일 레코드로 계산되고 표시됩니다.

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