카운트 기능으로 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$
인 쿼리 결과의 두 번째 행에 집계됩니다. 나머지 기록에도 동일하게 적용됩니다.