[SQL] Aggregate Functions (집계 함수)

박미영·2023년 4월 26일
0

DataSchool StudyNote - SQL

목록 보기
10/12

📌Aggregate Functions (집계 함수)

여러 칼럼 혹은 테이블 전체 칼럼으로부터 하나의 결과값을 반환하는 함수



📍COUNT

총 갯수를 계산해 주는 함수

SELECT COUNT(column)
FROM table_name
WHERE condition



COUNT 예제1 : police_station 테이블에서 데이터는 모두 몇 개?

 select count(*) from police_station;


COUNT 예제2 : crime_status 테이블에서 경찰서는 총 몇군데?

 select count(distinct police_station) from crime_status;


COUNT 예제3 : crime_type 은 총 몇 가지?

select count(distinct crime_type) from crime_status;


 select distinct crime_type from crime_status;





📍SUM

숫자 칼럼의 합계를 계산해주는 함수

SELECT SUM(column)
FROM table_name
WHERE condition;



SUM 예제1 : 범죄 총 발생건수는?

SELECT SUM(case_number) FROM crime_status WHERE status_type='발생';


SUM 예제2 : 살인의 총 발생건수는?

select sum(case_number) from crime_status where status_type='발생'
 and crime_type='살인';


SUM 예제3 : 중부 경찰서에서 검거된 총 범죄 건수는?

select sum(case_number)
from crime_status
where status_type='검거' and police_station='중부';





📍AVG

숫자 칼럼의 평균을 계산해주는 함수

SELECT AVG(column)
FROM table_name
WHERE condition;



AVG 예제1 : 평균 폭력 검거 건수는?

SELECT AVG(case_number)
FROM crime_status
WHERE crime_type='폭력' AND status_type='검거';




AVG 예제2 : 중부경찰서 범죄 평균 발생 건수

select avg(case_number)
from crime_status
where police_station='중부' and status_type='발생';





📍MIN

숫자 칼럼 중 가장 작은 값을 찾아주는 함수

SELECT MIN(column)
FROM table_name
WHERE condition;



MIN 예제1 : 강도 발생 건수가 가장 적은 경우 몇 건?

select min(case_number)
from crime_status
where crime_type='강도' and status_type='발생';



MIN 예제2 : 중부경찰서에서 가장 낮은 검거 건수는?

select min(case_number)
from crime_status
where police_station='중부' and status_type='검거';





📍MAX

숫자 칼럼 중 가장 큰 값을 찾아주는 함수

SELECT MAX(column)
FROM table_name
WHERE condition;



MAX 예제1 : 살인이 가장 많이 검거된 건수는?

select max(case_number)
from crime_status
where crime_type='살인' and status_type='검거';



MAX 예제2 : 강남 경찰서에서 가장 많이 발생한 범죄 건수는?

select max(case_number)
from crime_status
where police_station='강남' and status_type='발생';





📍GROUP BY

그룹화하여 데이터를 조회

SELECT column1, column2, ...
FROM table_name
WHERE condition
GROUP BY column1, column2, ...
ORDER BY column1, column2, ...;



GROUP BY 예제1 : crime_status 에서 경찰서별로 그룹화 하여 경찰서 이름을 조회

select police_station
from crime_status
group by police_station
order by police_station
limit 5;


경찰서 종류를 검색 - DISTINCT 를 사용하는 경우 (ORDER BY 를 사용할 수 없음)

select distinct police_station
from crime_status
limit 5;



GROUP BY 예제2 : 경찰서 별로 총 발생 범죄 건수를 검색

select police_station, sum(case_number) 발생건수
from crime_status
where status_type='발생'
group by police_station
order by 발생건수 desc
limit 5;



GROUP BY 예제3 : 경찰서 별로 평균 범죄 검거 건수를 검색

select police_station, avg(case_number) 평균검거건수
from crime_status
where status_type='검거'
group by police_station
order by 평균검거건수
limit 5;

select police_station, avg(case_number) 평균검거건수
from crime_status
where status_type='검거'
group by police_station
order by 평균검거건수 desc
limit 5;



GROUP BY 예제4 : 경찰서 별 평균 범죄 발생건수와 평균 범죄 검거 건수를 검색

select police_station, status_type, avg(case_number) 평균건수
from crime_status
group by police_station, status_type
limit 6;





📍HAVING

조건에 집계함수가 포함되는 경우 WHERE 대신 HAVING 사용

SELECT column1, column2, ...
FROM table_name
WHERE condition
GROUP BY column1, column2, ...
HAVING condition (Aggregate Functions)
ORDER BY column1, column2, ...;



HAVING 예제1 : 경찰서 별로 발생한 범죄 건수의 합이 4000 건보다 보다 큰 경우를 검색

select police_station, sum(case_number) count
from crime_status
where status_type = '발생'
group by police_station
having count > 4000;



HAVING 예제2 : 경찰서 별로 발생한 폭력과 절도의 범죄 건수 평균이 2000 이상인 경우를 검색

select police_station, avg(case_number)
from crime_status
where crime_type in ('폭력', '절도') and status_type='발생'
group by police_station
having avg(case_number) >= 2000




🤔

오랜만에 SQL하는 거라 기억이 잘 안나지만 EDA 할 때 보단 마음이 훨씬 편하다.
적당히 해도 이해는 잘 되니까
물론 VS CODE 랑 연결할땐 계속 ERROR나서 화가 났다,,, 어려워 어려워
또 과제나오면 쉽지 않겠지ㅠㅠㅠㅠㅠㅠ


"이 글은 제로베이스 데이터 취업 스쿨 강의를 듣고 작성한 내용으로 제로베이스 데이터 취업 스쿨 강의 자료 일부를 발췌한 내용이 포함되어 있습니다."

0개의 댓글