티스토리 뷰

서론

SQL 문제를 풀면서 공부한 GROUP BY와 HAVING에 대한 내용을 소개합니다.

본론

GROUP BY

GROUP BY는 이름 그대로 기준을 통해 레코드들을 그룹화 해줍니다. 이렇게 만들어진 그룹에서 대표 하나만 반환합니다.

아래와 같은 레코드들이 존재한다고 할 때 GROUP BY email 을 통해 그룹화를 해주면 대표격인 레코드 하나씩만을 반환합니다.

Person
| id | email   |
| -- | ------- |
| 1  | a@b.com |
| 2  | c@d.com |
| 3  | a@b.com |
SELECT id, email
FROM Person
GROUP BY email;
| id | email   |
| -- | ------- |
| 1  | a@b.com |
| 2  | c@d.com |

그래서 보통 GROUP BY는 COUNT, AVG, SUM 등과 같은 함수와 같이 사용하는 경우가 많습니다.

HAVING

HAVIN은 WHERE과 유사하면서도 다른 점을 가지고 있습니다.
WHERE은 그룹화 되기 전 전체 행에 대해 적용되는 반면 HAVING은 그룹화 된 결과 행에 영향을 미친다는 것입니다.
따라서 통계함수를 사용하는 경우에는 HAVING을 이용하여야 합니다.

SELECT email
FROM Person
WHERE COUNT(email) > 1;

--RuntimeError
--Invalid use of group function

만약 HAVING과 WHERE을 둘 다 사용하는 경우에는 WHERE 절로 먼저 필터링이 되고 후에 HAVING 절로 다시한번 필터링 됩니다.

결론

데이터를 다루는 방법을 배워보니 생각보다 비슷하면서도 다른점이 많은 것 같습니다.

'개발자 > 데이터베이스(DB)' 카테고리의 다른 글

[SQL] Function 만들기  (0) 2024.02.13
[SQL] 순위를 지정하는 RANK 함수  (0) 2024.02.07
[SQL] LEFT JOIN과 ON  (0) 2024.02.06
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함