반응형
그룹화 - GROUP BY
1. GROUP BY로 그룹화
- GROUP BY구를 통해 지정된 열의 값이 같은 행을 하나의 그룹으로 묶어서 집계함수로 넘겨줄 수 있다.
SELECT name FROM sample51 GROUP BY name;
- 결과는 DISTINCT와 같다.
- GROUP BY의 의미는 집계함수와 함께 사용할 때 나타난다.
SELECT name, COUNT(name), SUM(quantity) FROM sample51 GROUP BY name;
- GROUP BY에 의해 name이 4개의 그룹으로 나뉘고, 각 그룹별로 COUNT와 SUM의 결과가 반환됐다.
2. HAVING 구로 조건 지정
SELECT 열 FROM 테이블 GROUP BY 열 HAVING 조건
- WHERE구는 GROUP BY보다 처리 순서가 앞서기때문에 집계함수에서는 WHERE구의 조건식에서는 GROUP BY를 사용할 수 없다.
- 하지만 그룹화보다 늦게 처리되는 ORDER BY등은 문제없이 사용이 가능하다.
내부처리 순서 : WHERE → GROUP BY → HAVING → SELECT → ORDER BY
- 집계한 결과에서 조건에 맞는 값을 따로 걸러낼 때는 HAVING구를 사용한다.
SELECT name,COUNT(name)FROM sample51 GROUP BY name HAVING COUNT(name)=1;
SELECT name AS n,COUNT(name) AS cn FROM sample51 GROUP BY n HAVING cn=1; 같은 명령은 SELECT구가 후순위이기 때문에 원래는 불가능하지만, MySQL에서는 융통성있게 사용이 가능하다.
3. 복수열의 그룹화
- GROUP BY에 지정한 열 이외의 열은 집계함수 없이 SELECT구에 기술할 수 없다.
- GROUP BY는 그룹마다 하나의 행만을 반환하는데, 나머지 열에 대에 그룹 중 어떤 값을 반환해야할지 지정되지 않아 에러가 생기는 것이다.
SELECT MIN(no),name,SUM(quantity) FROM sample51 GROUP BY name;
위와 같이 복수의 열을 지정할 때는 집계함수로 하나의 값을 지정해줘야한다.
4. 결과값 정렬
- GROUP BY로 그룹화 한 후에도 ORDER BY구를 사용해 결과를 정렬할 수 있다.
SELECT name, COUNT(name),SUM(quantity) FROM sample51 GROUP BY name ORDER BY SUM(quantity) DESC;
반응형
'자격증 > SQLD' 카테고리의 다른 글
[SQL 첫걸음] 24강. 상관 서브쿼리 (0) | 2022.04.04 |
---|---|
[SQL 첫걸음] 23강. 서브쿼리 (0) | 2022.04.04 |
[SQL 첫걸음] 21강. COUNT 이외의 집계함수 (0) | 2022.04.04 |
[SQL 첫걸음] 20강. 행 개수 구하기 - COUNT (0) | 2022.04.04 |
[SQL 첫걸음] 19강. 물리삭제와 논리삭제 (0) | 2022.04.04 |