본문 바로가기

프로그래밍 언어/SQL

[MySQL] 그룹화(GROUP BY), 그룹화 조건(HAVING)

2023-04-11 TIL 22강 그룹화 - GROUP BY

 

SELECT [열명] FROM [테이블명] GROUP BY [열명] : 그룹화하기

  • DISTINCT를 지정했을 때와 같은 결과가 나옴
  • 열을 지정하여 그룹화하면 지정된 열의 값이, 같은 행이 하나의 그룹으로 묶임
SELECT name FROM sample51 GROUP BY name;

 

  • GROUP BY로 그룹화된 각각의 그룹이 하나의 집합으로서 집계함수의 인수로 넘겨진다
SELECT name, COUNT(name), SUM(quantity) FROM sample51 GROUP BY name;

 

 

HAVING 구로 조건 지정

  • 집계함수는 WHERE 구를 사용할 수 없다
  • WHERE 구로 행을 검색하는 처리가 GROUP BY로 그룹화하는 처리보다 먼저이기 때문이다
  • 내부처리 순서 : WHERE 구 > GROUP BY 구 > SELECT 구 > ORDER BY 구

집계함수에서 WHERE구를 사용하면 에러 발생

 

  • HAVING 구를 사용하면 집계함수를 사용해서 조건식을 지정할 수 있다
SELECT name, COUNT(name) FROM sample51 GROUP BY name HAVING COUNT(name) = 1;

 

  • HAVING 구는 SELECT 구보다 먼저 처리되므로 별명(AS)을 사용할 수 없다
  • HAVING 구 내부처리 순서 : WHERE 구 > GROUP BY 구 > HAVING 구 > SELECT 구 > ORDER BY 구

 

 

복수열의 그룹화

  • SELECT 구에는 GROUP BY로 지정한 열 또는 집계함수를 사용한 열을 작성할 수 있다

SELECT구에 기술할 수 없는 열

 

  • name 열 값이 A 그룹의 quantity 열 값은 1, 2 두 개이고, 이때 그룹마다 하나의 값만을 반환해야 하므로 어느 것을 반환하면 좋을지 몰라 에러가 발생한다
  • 집계함수를 사용하면 집합은 하나의 값으로 계산되므로, 그룹마다 하나의 행을 출력할 수 있다

집계함수를 사용하여 복수열을 그룹화

 

GROUP BY에 지정한 열은 SELECT구에 그대로 지정

 

 

결과값 정렬

  • GROUP BY 로 정렬은 불가하므로 ORDER BY 구를 사용하여 정렬한다