4.1 열 그룹화

또한 매우 중요한 점은 레코드를 그룹화하면 섹션에서 SELECT데이터가 그룹화되는 열만 지정할 수 있다는 것입니다.

할 수 없다유형 쿼리를 작성하고 섹션에 이름SELECT 열을 지정합니다 .

SELECT brand, name
FROM product
GROUP BY brand

product 테이블에 이름이 field 인 여러 행이 있고 여기 에서 대체해야 하는 행이 명확하지 않습니다. 다시 생각해보세요: 각 브랜드의 제품 수와 결과 테이블이 제품 이름을 얻는 방법을 알고 싶습니까?

연산자를 사용하면 GROUP BY일반 행은 결과에 포함되지 않고 데이터가 그룹화된 열과 다음과 같은 "계산된 열"만 결과에 포함됩니다.COUNT(*)

4.2 계산 열로 그룹화

그러나 여러 열 및 계산된 열로도 그룹화할 수 있습니다. 예:

SELECT
YEAR(join_date) AS hire_year,
COUNT(*) AS total
FROM employee
GROUP BY hire_year

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

고용_연도
2012년 1
2013년 1
2014년 1
2015년 2
2018년 1

요청을 분석해 보겠습니다.

직원 테이블 에서 각 직원은 고유한 고용 날짜를 가지므로 이를 기준으로 데이터를 그룹화하면 작동하지 않습니다. 각 날짜에 대해 하나의 레코드가 있고 그룹화는 별로 의미가 없습니다. 하지만 입사일에서 입사년도로 넘어가면 회사가 같은 해에 여러 명의 직원을 고용한 상황이 될 수도 있습니다.

그룹화하기 전에 이 테이블이 어떻게 보이는지 다시 살펴보겠습니다.

SELECT
 	id,
 	name,
 	YEAR(join_date) AS hire_year,
 	join_date
FROM employee

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

ID 이름 고용_연도 가입 날짜
1 이바노프 이반 2012년 2012-06-30
2 페트로프 페트르 2013년 2013-08-12
이바노프 세르게이 2014년 2014-01-01
4 라비노비치 모이샤 2015년 2015-05-12
5 키리엔코 아나스타샤 2015년 2015년 10월 10일
6 바스카 2018년 2018-11-11

그러나 이 결과 테이블은 Hier_year 로 그룹화할 수 있으며 특정 연도에 얼마나 많은 사람이 고용되었는지 확인할 수 있습니다.

4.3 여러 열로 그룹화

이제 매년 매달 몇 명의 직원을 고용했는지 알아봅시다. 이렇게 하려면 고용 연도(hire_year)와 고용 월(hire_month)이라는 두 개의 계산된 필드를 한 번에 쿼리에 추가해야 합니다.

다음과 같은 쿼리를 작성해 봅시다.

SELECT
 	id,
 	name,
 	YEAR(join_date) AS hire_year,
 	MONTH(join_date) AS hire_month,
 	join_date
FROM employee

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

ID 이름 고용_연도 고용_월 가입 날짜
1 이바노프 이반 2012년 6 2012-06-30
2 페트로프 페트르 2013년 8 2013-08-12
이바노프 세르게이 2014년 1 2014-01-01
4 라비노비치 모이샤 2015년 5 2015-05-12
5 키리엔코 아나스타샤 2015년 10 2015년 10월 10일
6 바스카 2018년 열하나 2018-11-11

이 결과 테이블의 데이터를 월별로 그룹화하면 고용된 연도에 관계없이 사람들을 그룹으로 그룹화할 수 있습니다. 그리고 결과 테이블에는 연도, 월 및 고용된 직원 수의 세 열이 필요합니다.

이렇게 하려면 연산자 뒤에 GROUP BY하나가 아닌 두 개의 열 이름을 사용해야 합니다. 예:

SELECT
 	YEAR(join_date) AS hire_year,
 	MONTH(join_date) AS hire_month,
 	COUNT(*) AS total
FROM employee
GROUP BY hire_year, hire_month

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

고용_연도 고용_월
2012년 6 1
2013년 8 1
2014년 1 1
2015년 5 1
2015년 10 1
2018년 열하나 1

테이블에 레코드가 거의 없으므로 합계 열의 모든 곳에 단위가 있습니다. 그런데 그룹으로 묶는 열이 많을수록 결과에 더 많은 행이 포함됩니다.