TIL/DB

[TIL] 집계 함수 (COUNT,SUM,AVG...) + LIMIT, DISTINCT

Dream COM Ddulut 2024. 12. 5. 10:34

https://school.programmers.co.kr/learn/courses/30/lessons/59408

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

오늘 SQL 문제를 풀면서 COUNT와 DISTINCT에 대해 정리할 필요성을 느꼈다.

기왕 이렇게 된거 COUNT만 정리하기는 좀 그러니까 집계 함수에 대해 전반적으로 정리해보았다.


 

'집계 함수' 란?

 

데이터베이스에서 검색된 여러 투플들의 집단(그룹)에 적용되는 함수

 

 

 

특징

 

집계함수는 `SELECT`절과 `HAVING`절에서만 사용된다. 

'WHERE' 절에서는 집계 함수를 사용할 수 없다.

 

 

종류

집계 함수 기능 NULL 값 집계 여부 기타 사항
COUNT 투플이나 값들의 개수 COUNT(*): null 값 포함
COUNT(애트리뷰트): X
COUNT(*): null과 중복에 상관 없이 모든 투플 총 개수 출력
COUNT(애트리뷰트): null값을 제외한 튜플의 개수 반환
SUM 값들의 합 X 숫자형 애트리뷰트에만 적용 가능
AVG 값들의 평균 X 숫자형 애트리뷰트에만 적용 가능
MAX 값들의 최댓값 X 숫자형, 비숫자형 애트리뷰트 모두 적용 가능
MIN 값들의 최솟값 X 숫자형, 비숫자형 애트리뷰트 모두 적용 가능

 

💡중복 제거 - DISTINCT
DISTINCT가 집계 함수 앞에 사용되면 집계 함수가 적용되기 전에 먼저 중복을 제거한다.
중복을 제거한 결과는 MIN, MAX에는 영향이 없고, SUM, AVG, COUNT의 결과에는 영향을 준다. 

💡반환되는 결과 갯수 제한 - LIMIT
LIMIT 3 :   3개의 결과만 출력
LIMIT(1,3) :   2번째 인덱스부터 3개 결과만 출력 (인덱스는 0부터 시작한다.)

 

 

 

사용 예시

 

1. MIN, MAX

숫자

SELECT MIN(salary) AS minimum_salary //월급 최솟값 구하기
FROM employees;

SELECT MAX(salary) AS maximum_salary //월급 최댓값 구하기
FROM employees;

 

문자열

  MIN 함수는 사전 순서로 가장 앞에 오는 문자열을, MAX 함수는 사전 순서로 가장 뒤에 오는 문자열을 반환한다.

//가장 앞에 오는 이름과 가장 나중에 나오는 이름 출력
SELECT MIN(name) AS earliest_name, MAX(name) AS latest_name
FROM users;

 

날짜

  MIN 함수는 가장 이른 날짜를, MAX 함수는 가장 늦은 날짜를 반환한다.

//가장 이른 생년월일과 가장 늦은 생년월일 반환
SELECT MIN(birthdate) AS earliest_birthdate, MAX(birthdate) AS latest_birthdate
FROM users;

 

 

 

2. SUM

SELECT SUM(salary) AS total_salary //월급의 합계 반환
FROM employees;

 

 

 

3. AVG

SELECT AVG(salary) AS average_salary //평균 월급 반환
FROM employees;

 

 

 

4. COUNT

COUNT(*)
  null과 중복에 상관 없이 모든 투플 총 개수를 출력한다.

SELECT COUNT(*) AS total_rows
FROM employees;

 

• COUNT(애트리뷰트)
  null값을 제외한 튜플의 개수 반환한다.

SELECT COUNT(email) AS email_count //NULL값은 함계에 포함되지 않는다.
FROM employees;

 

 

 

5. LIMIT

반환되는 행의 개수를 제한한다.

SELECT *
FROM employees
LIMIT 10; //첫 10개의 행반 반환

 

 

 

6. DISTINCT

중복을 제거한 값을 반환한다.

SELECT DISTINCT job_title
FROM employees;

 

• COUNT에 DISTINCT 적용

department_id에서 중복된 값을 모두 제거한 후, 남은 department_id의 개수를 집계하여 반환한다.

SELECT COUNT(DISTINCT department_id) AS unique_departments
FROM employees;

 

'TIL > DB' 카테고리의 다른 글

[TIL] MySQL 출력할 행의 개수 제한하기 - LIMIT, OFFSET  (0) 2024.12.10
[TIL] DATE, DATETIME, TIMESTAMP 비교  (0) 2024.12.06
[TIL] 릴레이션의 KEY  (0) 2024.12.04