그룹은 "특정 규칙에 따라 그룹화(그룹화)"하는 것으로 이해될 수 있는 "그룹 쿼리"를 의미합니다. 그 기능은 특정 규칙을 통해 데이터 세트를 여러 개의 작은 영역으로 나눈 다음 여러 개의 작은 영역을 대상으로 하는 것입니다. 영역은 데이터 처리에 사용됩니다. MySQL에서 GROUP BY는 하나 이상의 필드를 기반으로 쿼리 결과를 그룹화하는 데 사용되는 SELECT 문의 선택적 절입니다. 이는 결과 집합의 행 수를 줄입니다.
이 튜토리얼의 운영 환경: windows7 시스템, mysql8 버전, Dell G3 컴퓨터.
그룹은 "그룹 쿼리"를 의미합니다.
Group By 문은 문자 그대로 영어로 "특정 규칙에 따라 그룹화"를 의미합니다. 그 기능은 특정 규칙을 통해 데이터 세트를 여러 개의 작은 영역으로 나눈 다음 여러 개의 작은 영역에서 데이터 처리를 수행하는 것입니다.
MySQL에서 GROUP BY 키워드는 하나 이상의 필드에 따라 쿼리 결과를 그룹화할 수 있습니다.
GROUP BY 절은 열 또는 표현식의 값을 기준으로 행 집합을 요약 행 레코드의 작은 그룹으로 그룹화합니다. GROUP BY 절은 각 그룹에 대해 하나의 행을 반환합니다. 즉, 결과 집합의 행 수가 줄어듭니다.
GROUP BY 절은 SUM, AVG, MAX, MIN 및 COUNT와 같은 집계 함수와 함께 자주 사용됩니다. 집계 함수는 SELECT 절에서 각 그룹화에 대한 정보를 계산하는 데 사용됩니다.
GROUP BY 절은 SELECT 문의 선택적 절입니다. 다음은 GROUP BY 절 구문입니다.
SELECT c1, c2,..., cn, aggregate_function(ci) FROM table WHERE where_conditions GROUP BY c1 , c2,...,cn;
GROUP BY 절은 FROM 및 WHERE 절 뒤에 와야 합니다. GROUP BY 키워드 다음에는 행을 그룹화하기 위한 조건으로 사용되는 열 또는 표현식의 쉼표로 구분된 목록이 옵니다.
1. Simple MySQL GROUP BY example
샘플 데이터베이스(yiibaidb)의 주문 테이블을 살펴보겠습니다. 그 구조는 다음과 같습니다. -
mysql> desc orders;
주문 상태 값을 하위 그룹으로 그룹화하려면 GROUP BY 절을 사용하고 상태 열을 지정하여 그룹화해야 합니다.
SELECT status FROM orders GROUP BY status;
위 쿼리 문을 실행하면 다음과 같은 결과가 나옵니다 -
GROUP BY 절에서 반환된 상태 값이 고유하다는 것을 알 수 있습니다. 이는 다음 쿼리에 표시된 것처럼 DISTINCT 연산자처럼 작동합니다.
SELECT DISTINCT status FROM orders;
위 쿼리 문을 실행하고 다음 결과를 얻습니다.
2. MySQL GROUP BY 및 집계 함수
는 집계를 사용하여 실행될 수 있습니다. 함수 행 집합을 계산하고 단일 값을 반환합니다. GROUP BY 절은 집계 함수와 함께 사용되어 각 그룹에 대한 계산을 수행하고 단일 값을 반환하는 경우가 많습니다.
예를 들어 상태별 주문 수를 알고 싶다면 아래와 같이 COUNT 함수와 GROUP BY 절 쿼리문을 사용할 수 있습니다.
SELECT status, COUNT(*) AS total_number FROM orders GROUP BY status;
위 쿼리문을 실행하면 다음과 같은 결과를 얻을 수 있습니다.
다음 주문(주문) 및 주문 세부정보(orderdetails) 표를 참조하세요. 해당 ER 다이어그램은 아래에 표시됩니다.
모든 주문의 상태별 총액을 확인하려면 orderdetails를 사용할 수 있습니다. 테이블을 연결하여 주문 테이블을 연결하고 SUM 함수를 사용하여 총액을 계산합니다. 다음 쿼리를 참고하세요.
SELECT status, SUM(quantityOrdered * priceEach) AS amount FROM orders INNER JOIN orderdetails USING (orderNumber) GROUP BY status;
위 쿼리를 실행하면 다음과 같은 결과가 나옵니다. -
마찬가지로 다음 쿼리도 주문 번호와 각 주문의 총액을 반환합니다.
SELECT orderNumber, SUM(quantityOrdered * priceEach) AS total FROM orderdetails GROUP BY orderNumber;
위 쿼리를 실행하여 다음 결과를 얻습니다. -
3. MySQL GROUP BY 표현식 예시
열 외에도 행을 표현식으로 그룹화할 수 있습니다. 다음 쿼리는 연간 총 매출을 가져옵니다.
SELECT YEAR(orderDate) AS year, SUM(quantityOrdered * priceEach) AS total FROM orders INNER JOIN orderdetails USING (orderNumber) WHERE status = 'Shipped' GROUP BY YEAR(orderDate);
위 쿼리를 실행하여 다음과 같은 결과를 얻습니다. -
이 예에서는 YEAR 함수를 사용하여 주문 날짜(orderDate)에서 연도 데이터를 추출합니다. 배송됨 상태의 주문만 포함됩니다. SELECT 절에 나타나는 표현식은 GROUP BY 절의 표현식과 동일해야 합니다.
HAVING 절을 사용하여 GROUP BY 절에서 반환된 그룹을 필터링할 수 있습니다. 다음 쿼리는 HAVING 절을 사용하여 2013년 이후의 연간 매출 합계를 선택합니다.
SELECT YEAR(orderDate) AS year, SUM(quantityOrdered * priceEach) AS total FROM orders INNER JOIN orderdetails USING (orderNumber) WHERE status = 'Shipped' GROUP BY year HAVING year > 2013;
위 쿼리를 실행하면 다음과 같은 결과가 나옵니다 -
标准SQL不允许使用GROUP BY子句中的别名,但MySQL支持此选项。以下查询从订单日期提取年份,并对每年的订单进行计数。该year用作表达式YEAR(orderDate)的别名,它也用作GROUP BY子句中的别名,此查询在标准SQL中无效。
参考以下查询 -
SELECT YEAR(orderDate) AS year, COUNT(orderNumber) FROM orders GROUP BY year;
执行上面查询,得到以下结果 -
MySQL还允许您以升序或降序(标准SQL不能提供)对组进行排序。默认顺序是升序。例如,如果要按状态获取订单数量并按降序对状态进行排序,则可以使用带有DESC的GROUP BY子句,如下查询语句:
SELECT status, COUNT(*) FROM orders GROUP BY status DESC;
执行上面查询,得到以下结果 -
请注意,在GROUP BY子句中使用DESC以降序对状态进行排序。我们还可以在GROUP BY子句中明确指定ASC,按状态对分组进行升序排序。
【相关推荐:mysql视频教程】
위 내용은 그룹화은 무슨 뜻인가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!