[SQL] 22. 그룹화 - GROUP BY

uuuu.jini·2023년 1월 29일
0

SQL 첫걸음

목록 보기
22/36
post-thumbnail

그룹화를 통해 집계함수의 활용범위를 넓힐 수 있다.

SELECT FROM 테이블명 GROUP BY 열1, 열2, ...

1. GROUP BY로 그룹화


GROUP BY 구에 열을 지정하여 그룹화하면 지정된 열의 값이 같은 행이 하나의 그룹으로 묶인다.

  • SELECT name FORM sample51 GROUP BY name;

각 그룹으로 묶인 값들은 서로 동일하다. -> DISTINCT와 같이 중복을 제거하는 효과가 있다.

  • name 열을 그룹화해 계산하기
  • SELECT name, COUNT(name), SUM(quantity) FROM sample51 GROUP BY name;
    • GROUP BY에 의해 name 열 값이 네 개 그룹으로 나뉜다. A 그룹에는 두 개의 행이 있으며, COUNT는 행의 개수를 반환하므로 2개가 된다. A 그룹의 quantity의 sum은 1+2 = 3을 반환한다.

2. HAVING 구로 조건 지정


집계함수는 WHERE 구의 조건식에서는 사용할 수 없다. (WHERE구로 행을 검색하는 처리가 GROUP BY 로 그룹화하는 처리보다 순서상 앞서므로 그룹화가 필요한 집계함수는 WHERE 구에서 지정할 수 없다.)

내부처리순서
WHERE 구 -> GROUP BY 구 -> SELECT 구 -> ORDER BY 구

HAVING구를 사용하면 집계함수를 사용해서 조건식을 지정할 수 있다. GROUP BY 구 뒤에 기술하며 WHERE 구와 동일하게 조건식을 지정할 수 있다. 조건식에는 그룹별로 집계된 열의 값이나 집계함수의 계산 결과가 전달된다. (조건식이 참인 것만 반환)

  • SELECT name, COUNT(name) FROM sample51 GROUP BY name HAVING count(name) >=1

집계함수를 사용할 경우 HAVING 구로 검색조건을 지정한다.

그룹화보다 나중에 처리되는 ORDER BY 구에서는 문제없이 집계함수를 사용할 수 있다. >

내부처리순서
WHERE 구 -> GROUP BY 구 -> HAVING 구 -> SELECT 구 -> ORDER BY 구

HAVING 구 에서는 별명을 사용할 수 없다.

3. 복수열의 그룹화


GROUP BY 에서 지정한 열 이외의 열은 집계함수를 사용하지 않은 채 SELECT 구에 기술해서는 안된다. 그룹화하면 클라이언트로 반환되는 결과는 그룹당 하나의 행이된다. 하지만 그룹화하지 않은 열 값은 해당 그룹에서 여러개가 존재할 수 있으므로 각 그룹마다 하나의 값을 반환해야 하기때문에 에러가 발생한다.

집계함수를 사용하는 경우 집합은 하나의 값으로 계산되므로, 그룹마다 하나의 행을 출력할 수 있다.
SELECT MIN(no), name, SUM(quantity) FROM sample51 GROUP BY name;

GROUP BY로 지정한 열 이외의 열은 집계함수를 사용하지 않은 채 SELECT 구에 지정할 수 없다.

4. 결괏값 정렬


그룹화해도 실행결과 순서를 정렬할 수는 없다. 순서가 서로 바뀔 수 있다. GROUP BY 지정을 해도 정렬되지 않는다.

ORDER BY 구를 사용해 결과를 정렬할 수 있다. GROUP BY로 그룹화한 경우에도 ORDER BY로 정렬할 수 있다.

  • SELECT name, COUNT(name), SUM(quantity) FROM sample51 GROUP BY name ORDER BY SUM(quantity) DESC;
profile
멋쟁이 토마토

0개의 댓글