[SQL] 집계함수(count, sum, avg, min, max) group by, having

쩡이·2023년 8월 29일
0

SQL

목록 보기
9/10

실습환경

AWS RDS(database-1) zerobase에 접속

집계함수 (aggregate functions)

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

  • COUNT : 총 개수를 계산하는 함수
  • SUM : 숫자 컬럼의 합계를 계산하는 함수
  • AVG : 숫자 컬럼의 평균을 계산하는 함수
  • MIN : 가장 작은 값을 찾아주는 함수
  • MAX : 가장 큰 값을 찾아주는 함수
  • FIRST : 첫번째 결과값을 리턴하는 함수
  • LAST : 마지막 결과값을 리턴하는 함수

COUNT

select count(column)
from tablename
where condition;

예제1. police_station 테이블의 총 데이터 개수는?
select count(*) from police_station;

예제2. crime_status 테이블에서 경찰서는 총 몇 군데?
select count(distinct police_station) from crime_status;

crime_type은 총 몇가지?

select count(distinct crime_type) from crime_status;

SUM

select sum(column)
from tablename
where condition;

범죄 총 발생건수는?
select sum(case_number) from crime_status where status_type='발생';

살인 총 발생건수는?

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

AVG

select avg(column)
from tablename
where condition;

평균 폭력 검거 건수는?

select age(case_number) from crime_status
where crime_type like'폭력' and status_type like'검거';

중부경찰서 범죄 평균 발생 건수

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

MIN

select min(column)
from tablename
where condition;

강도 발생 건수가 가장 적은 경우는 몇 건?

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

중부경찰서에서 가장 낮은 검거 건수는?

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

MAX

select max(column)
from tablename
where condition;

살인이 가장 많이 검거된 건수는?

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

강남경찰서에서 가장 많이 발생한 범죄 건수는?

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

GROUP BY

그룹화하여 데이터를 조회
select 문에서 사용되고 집계함수랑 같이 쓸 수 있음
그룹화하고 order by 사용가능, distinct는 order by 사용 못함

select column1,column2,...
from tablename
where condition
group by column1, column2, ...
order by column1, column2, ...;

crime_status에서 경찰서별로 그룹화하여 경찰서 이름을 조회

select police_station from crime_status
group by police_station
order by police_station;

경찰서 별로 총 발생 범죄 건수 검색

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

경찰서 별로 평균 범죄 검거 건수 검색

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

경찰서 별 평균 범죄 발생건수와 평균 범죄 검거건수를 검색

select police_station, status_type, avg(case_number)
from crime_status
group by police_station, status_type;

HAVING

where 절에는 집계함수를 사용할 수 없어서
조건절 (where)에 집계함수가 포함되는 경우, where 대신 having 사용
having의 위치는 group by 밑에

select column1,column2,...
from tablename
where condition
group by column1, column2, ...
having condition(집계함수가 포함된 조건)
order by column1, column2, ...;

경찰서 별로 발생한 범죄 건수의 합이 4000보다 큰 경우 검색

select police_station, sum(case_number) 범죄발생건수
from crime_status
where status_type like '발생'
group by police_station
having 범죄발생건수 > 4000;

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

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

0개의 댓글