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 |
테이블에 레코드가 거의 없으므로 합계 열의 모든 곳에 단위가 있습니다. 그런데 그룹으로 묶는 열이 많을수록 결과에 더 많은 행이 포함됩니다.
GO TO FULL VERSION