Meme's IT

[SQLD] 집계함수(GROUP BY, HAVING 등) 본문

공부/SQLD

[SQLD] 집계함수(GROUP BY, HAVING 등)

Memez 2023. 10. 31. 12:44

# 다중행 집계 함수

여러 행들의 그룹이 모여서 그룹당 하나의 결과를 돌려주는 함수

  • GROUP BY 절이 없으면 그룹할 대상이 없어서 에러 발생
  • SELECT, HAVING, ORDER BY에 사용 가능 / WHERE에서는 불가능
  • 공집합에서도 연산 가능
  • ALL: 기본 옵션, 생략 가능 / DISTINCT: 중복 제거

 

# 집계함수 종류

🔹 COUNT

특정 열(column)의 행의 개수를 세는 함수

  • COUNT(*): NULL을 포함한 테이블에 존재하는 행의 갯수가 반환
  • COUNT(특정 열): NULL을 제외한 해당 열의 행의 갯수 반환
  • AS로 결과로 나온 열의 별칭 지정가능
  • DISTINT로 중복 제거 가능
SELECT COUNT(*) FROM tb;
SELECT COUNT(Name) FROM tb;
SELECT COUNT(Name) AS "My count" FROM tb;
SELECT COUNT(DISTINCT Country) FROM tb;

 

 

🔹 MIN/MAX

최대값과 최소값을 구하는 함수

  • COUNT함수과 똑같이 쓰면 된다.
  • 문자나 문자열도 가능 → 사전 순으로 반환된다.
SELECT MAX(Age) FROM tb;
SELECT MIN(Age) FROM tb;

 

 

🔹 AVG / SUM

선택한 열의 평균과 합을 계산하는 함수

  • 숫자만 가능
  • NULL값은 무시하고 계산함(0으로 치고 하고싶다면 작업 추가해야함)
SELECT AVG(Age) FROM tb;
SELECT SUM(Age) FROM tb;

# GROUP BY⭐

테이블의 일부 행만을 대상으로 집계함수를 사용할 수 있다.

예를 들어, 각 나라별 Age의 합을 구하고 싶다면 다음과 같이 쓸 수 있다.

SELECT Country, SUM(Age) FROM tb GROUP BY Country;
  • GROUP BY 뒤에 오는 열의 값들을 묶어서 계산해준다.
  • NULL값은 제외하고 수행하고
  • ALIAS(별칭)은 사용할 수 없다

 

 

# HAVING ⭐

WHERE과 비슷한 역할을 하며, 주로 GROUP BY와 같이 쓰이는 조건문이다

WHERE은 집계함수를 사용할 수 없지만, HAVING은 집계 함수와 함께 사용 가능하다

SELECT Country, AVG(Age) FROM tb GROUP BY Country HAVING AVG(Age) >= 23;

: 평균 나이가 23세 이상인 나라들만 선택하는 절

'공부 > SQLD' 카테고리의 다른 글

[SQLD] 조인(JOIN)  (0) 2023.10.31
[SQLD] ORDER BY  (0) 2023.10.31
[SQLD] WHERE절과 연산자  (0) 2023.10.30
[SQLD] TCL(Transaction Control Language)  (0) 2023.10.30
[SQLD] DML(Data Manipulation Language)  (0) 2023.10.30