MySQL
그룹 분류 기준
수색…
통사론
- SELECT expression1, expression2, ... expression_n,
- aggregate_function (expression)
- FROM 테이블
- [조건]
- GROUP BY expression1, expression2, ... expression_n;
매개 변수
매개 변수 | 세부 |
---|---|
expression1, expression2, ... expression_n | 집계 함수 내에 캡슐화되지 않은 표현식이며 GROUP BY 절에 포함되어야합니다. |
집계 함수 | SUM, COUNT, MIN, MAX 또는 AVG 기능과 같은 기능. |
테이블 | 당신이 레코드를 가져올 테이블. 하나 이상의 테이블이 FROM 절에 나열되어 있어야합니다. |
어디 조건 | 선택 과목. 레코드를 선택하기 위해 충족해야하는 조건. |
비고
MySQL GROUP BY 절은 SELECT 문에서 여러 레코드에 걸쳐 데이터를 수집하고 결과를 하나 이상의 열로 그룹화하는 데 사용됩니다.
그 행동은 부분적으로 ONLY_FULL_GROUP_BY
변수 의 값에 의해 제어됩니다. 이 옵션을 활성화하면 출력에없는 모든 열을 기준으로 그룹화하는 SELECT
문에서 오류가 반환됩니다. ( 이것은 기본값 인 5.7.5 입니다.)이 변수를 설정하고 설정하지 않으면 순진한 사용자 나 다른 DBMS에 익숙한 사용자에게 문제가 발생할 수 있습니다.
GROUP BY USING SUM 함수
SELECT product, SUM(quantity) AS "Total quantity"
FROM order_details
GROUP BY product;
MIN 기능을 사용하여 그룹화
각 행이 name
, department
및 salary
가있는 직원 인 직원 테이블을 가정하십시오.
SELECT department, MIN(salary) AS "Lowest salary"
FROM employees
GROUP BY department;
이것은 어떤 부서에 가장 낮은 급여를 가진 직원이 있는지, 그리고 그 급여가 무엇인지를 알려줍니다. 각 부서에서 가장 낮은 급여를 가진 직원의 name
을 찾는 것이이 예제의 범위를 벗어나는 다른 문제입니다. "groupwise max"를 참조하십시오.
GROUP BY USING COUNT 함수
SELECT department, COUNT(*) AS "Man_Power"
FROM employees
GROUP BY department;
HAVING을 사용하여 GROUP BY
SELECT department, COUNT(*) AS "Man_Power"
FROM employees
GROUP BY department
HAVING COUNT(*) >= 10;
GROUP BY ... HAVING
사용 집계 레코드를 필터링하는 것은 SELECT ... WHERE
를 사용하여 개별 레코드를 필터링하는 것과 유사합니다.
HAVING
이 "별칭"을 이해하고 있으므로 HAVING
HAVING Man_Power >= 10
이라고 말할 수도 있습니다.
그룹 연결을 사용하여 그룹화
그룹 연결 은 MySQL에서 열마다 하나 이상의 결과가있는 표현식의 연결 값을 가져 오는 데 사용됩니다. 의미, Name(1):Score(*)
과 같은 하나의 열에 대해 다시 선택할 수있는 행이 여러 개 있습니다 Name(1):Score(*)
이름 | 점수 |
---|---|
아담 | A + |
아담 | 에이- |
아담 | 비 |
아담 | C + |
계산서 | 디- |
남자 | 에이- |
SELECT Name, GROUP_CONCAT(Score ORDER BY Score desc SEPERATOR ' ') AS Grades
FROM Grade
GROUP BY Name
결과 :
+------+------------+
| Name | Grades |
+------+------------+
| Adam | C+ B A- A+ |
| Bill | D- |
| John | A- |
+------+------------+
전체 기능이있는 GROUP BY
테이블 주문
+---------+------------+----------+-------+--------+
| orderid | customerid | customer | total | items |
+---------+------------+----------+-------+--------+
| 1 | 1 | Bob | 1300 | 10 |
| 2 | 3 | Fred | 500 | 2 |
| 3 | 5 | Tess | 2500 | 8 |
| 4 | 1 | Bob | 300 | 6 |
| 5 | 2 | Carly | 800 | 3 |
| 6 | 2 | Carly | 1000 | 12 |
| 7 | 3 | Fred | 100 | 1 |
| 8 | 5 | Tess | 11500 | 50 |
| 9 | 4 | Jenny | 200 | 2 |
| 10 | 1 | Bob | 500 | 15 |
+---------+------------+----------+-------+--------+
- 카운트
WHERE
절에서 특정 조건을 만족하는 행 수를 반환합니다.
예 : 각 고객의 주문 수.
SELECT customer, COUNT(*) as orders
FROM orders
GROUP BY customer
ORDER BY customer
결과:
+----------+--------+
| customer | orders |
+----------+--------+
| Bob | 3 |
| Carly | 2 |
| Fred | 2 |
| Jenny | 1 |
| Tess | 2 |
+----------+--------+
- 합집합
선택된 열의 합계 를 돌려줍니다.
예 : 총계와 각 고객의 항목 합계.
SELECT customer, SUM(total) as sum_total, SUM(items) as sum_items
FROM orders
GROUP BY customer
ORDER BY customer
결과:
+----------+-----------+-----------+
| customer | sum_total | sum_items |
+----------+-----------+-----------+
| Bob | 2100 | 31 |
| Carly | 1800 | 15 |
| Fred | 600 | 3 |
| Jenny | 200 | 2 |
| Tess | 14000 | 58 |
+----------+-----------+-----------+
- AVG
수치의 열의 평균치를 돌려줍니다.
예 : 각 고객의 평균 주문 값.
SELECT customer, AVG(total) as avg_total
FROM orders
GROUP BY customer
ORDER BY customer
결과:
+----------+-----------+
| customer | avg_total |
+----------+-----------+
| Bob | 700 |
| Carly | 900 |
| Fred | 300 |
| Jenny | 200 |
| Tess | 7000 |
+----------+-----------+
- MAX
특정 열 또는 표현식의 가장 높은 값을 반환합니다.
예 : 각 고객에 대한 가장 높은 주문 합계.
SELECT customer, MAX(total) as max_total
FROM orders
GROUP BY customer
ORDER BY customer
결과:
+----------+-----------+
| customer | max_total |
+----------+-----------+
| Bob | 1300 |
| Carly | 1000 |
| Fred | 500 |
| Jenny | 200 |
| Tess | 11500 |
+----------+-----------+
- MIN
특정 열 또는 표현식의 가장 낮은 값을 반환합니다.
예 : 각 고객에 대한 최저 주문 총계.
SELECT customer, MIN(total) as min_total
FROM orders
GROUP BY customer
ORDER BY customer
결과:
+----------+-----------+
| customer | min_total |
+----------+-----------+
| Bob | 300 |
| Carly | 800 |
| Fred | 100 |
| Jenny | 200 |
| Tess | 2500 |
+----------+-----------+