실습환경
AWS RDS(database-1) zerobase에 접속
여러 컬럼 혹은 테이블 전체 컬럼으로부터 하나의 결과값을 반환하는 함수
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;
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='발생';
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 '발생';
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='검거';
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='발생';
그룹화하여 데이터를 조회
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;
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;