https://school.programmers.co.kr/learn/courses/30/lessons/59408
오늘 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 |