예제가 포함된 SQL GROUP BY 및 HAVING 절

SQL Group by 절이란 무엇입니까?

GROUP BY 절은 다음 작업에 사용되는 SQL 명령입니다. 동일한 값을 갖는 그룹 행. GROUP BY 절은 SELECT 문에서 사용됩니다. 선택적으로 집계 함수와 함께 사용되어 데이터베이스에서 요약 보고서를 생성합니다.

그것이 바로 그 일입니다. 데이터 요약 데이터베이스에서.

GROUP BY 절이 포함된 쿼리를 그룹화된 쿼리라고 하며 모든 그룹화된 항목에 대해 단일 행만 반환합니다.

SQL GROUP BY 구문

이제 SQL GROUP BY 절이 무엇인지 알았으니 쿼리별 기본 그룹 구문을 살펴보겠습니다.

SELECT statements... GROUP BY column_name1[,column_name2,...] [HAVING condition];

여기를 클릭하십시오.

  • "SELECT 문..."은 표준 SQL SELECT 명령 쿼리입니다.
  • "GROUP BY 컬럼_이름1”는 컬럼명1을 기준으로 그룹핑을 수행하는 절이다.
  • “[,column_name2,…]”는 선택 사항입니다. 둘 이상의 열에 대해 그룹화가 수행되는 경우 다른 열 이름을 나타냅니다.
  • "[HAVING 조건]"은 선택 사항입니다. GROUP BY 절의 영향을 받는 행을 제한하는 데 사용됩니다. 이는 다음과 유사합니다. WHERE 절.

다음을 사용하여 그룹화 단일 칼럼

SQL Group By 절의 효과를 이해하는 데 도움이 되도록 멤버 테이블의 모든 성별 항목을 반환하는 간단한 쿼리를 실행해 보겠습니다.

SELECT `gender` FROM `members` ;
gender
Female
Female
Male
Female
Male
Male
Male
Male
Male

성별에 대한 고유한 값을 얻고 싶다고 가정해 보겠습니다. 우리는 팔로우를 사용할 수 있습니다wing 쿼리 -

SELECT `gender` FROM `members` GROUP BY `gender`;

위 스크립트를 실행하면 MySQL 워크벤치 Myflixdb에 대한 다음 내용을 제공합니다.wing 결과.

gender
Female
Male

두 개의 결과만 반환되었습니다. 이는 남성과 여성의 두 가지 성별 유형만 있기 때문입니다. SQL의 GROUP BY 절은 모든 "남성" 멤버를 그룹화하고 이에 대해 단일 행만 반환했습니다. '여성' 멤버들 역시 마찬가지였다.

다음을 사용하여 그룹화 여러 열

영화 카테고리 ID와 해당 영화가 개봉된 연도 목록을 얻고 싶다고 가정해 보겠습니다.

이 간단한 쿼리의 출력을 살펴보겠습니다.

SELECT `category_id`,`year_released` FROM `movies` ;
category_id year_released
1 2011
2 2008
NULL 2008
NULL 2010
8 2007
6 2007
6 2007
8 2005
NULL 2012
7 1920
8 NULL
8 1920

위 결과에는 중복된 내용이 많습니다.

SQL에서 그룹별을 사용하여 동일한 쿼리를 실행해 보겠습니다.

SELECT `category_id`,`year_released` FROM `movies` GROUP BY `category_id`,`year_released`;

myflixdb에 대해 MySQL 워크벤치에서 위 스크립트를 실행하면 다음과 같은 결과가 나옵니다.wing 아래에 표시된 결과.

category_id year_released
NULL 2008
NULL 2010
NULL 2012
1 2011
2 2008
6 2007
7 1920
8 1920
8 2005
8 2007

GROUP BY 절은 카테고리 ID와 출시 연도 모두에서 작동하여 식별합니다. 유일한 위 예의 행.

카테고리 ID는 동일하지만 출시 연도가 다른 경우 행은 고유한 행으로 처리됩니다. 카테고리 ID와 출시 연도가 둘 이상의 행에서 동일한 경우 중복된 것으로 간주되며 단 하나의 행만 있습니다. 표시됩니다.

그룹화 및 집계 함수

데이터베이스에 남성과 여성의 총 수를 원한다고 가정합니다. 우리는 follo를 사용할 수 있습니다wing 이를 수행하기 위한 아래 스크립트가 표시됩니다.

SELECT `gender`,COUNT(`membership_number`)  FROM `members` GROUP BY `gender`;

myflixdb에 대해 MySQL 워크벤치에서 위 스크립트를 실행하면 다음과 같은 결과가 나옵니다.wing 결과.

gender COUNT('membership_number')
Female 3
Male 5

아래 결과는 게시된 고유한 성별 값별로 그룹화되었으며, 그룹화된 행 수는 COUNT 집계 함수를 사용하여 계산됩니다.

다음을 사용하여 쿼리 결과 제한 지키는

항상 주어진 테이블의 모든 데이터에 대해 그룹화를 수행하려는 것은 아닙니다. 결과를 특정 기준으로 제한하고 싶을 때가 있을 것입니다. 이러한 경우 HAVING 절을 사용할 수 있습니다.

영화 카테고리 ID 8의 모든 출시 연도를 알고 싶다고 가정해 보겠습니다. 다음을 사용합니다.wing 결과를 얻기 위한 스크립트입니다.

SELECT * FROM `movies` GROUP BY `category_id`,`year_released` HAVING `category_id` = 8;

Myflixdb에 대해 MySQL 워크벤치에서 위 스크립트를 실행하면 다음과 같은 결과가 나옵니다.wing 아래에 표시된 결과.

movie_id title director year_released category_id
9 Honey mooners John Schultz 2005 8
5 Daddy's Little Girls NULL 2007 8

카테고리 ID가 8인 영화만 GROUP BY 절의 영향을 받았습니다.

요약

  • GROUP BY 절 SQL은 동일한 값을 가진 행을 그룹화하는 데 사용됩니다.
  • GROUP BY 절은 다음과 함께 사용됩니다. SQL SELECT 문.
  • GROUP BY 절에 사용되는 SELECT 문은 열 이름, 집계 함수, 상수 및 표현식을 포함하는 경우에만 사용할 수 있습니다.
  • SQL Have 절은 GROUP BY 절에서 반환되는 결과를 제한하는 데 사용됩니다.
  • MYSQL GROUP BY 절은 여러 레코드와 하나 이상의 열로 설정된 반환 레코드에서 데이터를 수집하는 데 사용됩니다.