GROUP BY 구에 열을 지정하여 그룹화하면
지정된 열의 값이 같은 행끼리 하나의 그룹으로 묶인다.
마치 DISTINCT와 같이 중복을 제거하는 효과가 있다.
SELECT name, COUNT(name), SUM(quantity) FROM table GROUP BY name;
name열 값을 기준으로 그룹화가 된다,.
HAVING
WHERE 구 조건식으로 행을 검색하는 처리가 GROUP BY로 그룹화하는 처리보다 먼저 일어난다.
따라서 WHERE 구에서, 그룹화가 필요한 집계함수를 사용할 수 없다.
집계 함수 결과값에 의해 조건식을 작성하기 위해 HAVING 구를 쓴다!
GROUP BY 뒤에 작성하여 WHERE 구와 똑같이 조건식을 쓸 수 있다.
WHERE로 행 검색 -> 검색 후 GROUP BY로 그룹화 -> HAVING으로 조건 검색
SELECT name COUNT(name) FROM table WHERE COUNT(name) = 1 GROUP BY name;
WHERE 구에서는 집계함수를 사용해 조건식을 작성할 수 없다!
SELECT name, COUNT(name) FROM table GROUP BY name HAVING COUNT(name) = 1;
GROUP BY 뒤 HAVING 구에 집계함수 값을 이용해 조건식을 작성하면 된다.
내부 처리 순서
WHERE → GROUP BY → HAVING → SELECT → ORDER BY
GROUP BY에서 지정한 열 이외의 열은 집계함수를 사용하지 않은 채 SELECT 구에 지정할 수 없다.
SELECT no, name, quantity FROM table GROUP BY name;
name열로 그룹화했기 때문에 no, quantity열은 SELECT 구에 지정할 수 없다.
같은 name열 값에 다른 no, quantity열 값인 경우 어떤 것을 반환할지 모르기 때문이다.
SELECT name, quantity FROM table GROUP BY name. quantity;
위와 같이 여러 열로 그룹화를 하면 해당 열을 SELECT 구에 지정할 수 있다.
'CS > DB' 카테고리의 다른 글
IN / EXISTS / 상관 서브쿼리 (0) | 2021.12.04 |
---|---|
서브쿼리 (0) | 2021.12.03 |
집계함수 - COUNT / SUM / AVG / MIN / MAX (0) | 2021.12.03 |
데이터 추가, 갱신, 삭제 - INSERT / UPDATE / DELETE (0) | 2021.12.03 |
CASE문 (0) | 2021.12.03 |
댓글