Aggregate Function 종류
COUNT
select COUNT(*) from police_station;
- police_station테이블의 모든 행은 총 몇 개인지 반환
SUM
select SUM(case_number) from crime_status where status_type = '발생';
- crime_status에서 발생한 사건 수의 총합을 반환
select sum(case_number) from crime_status
where status_type = '검거' and police_station = '중부';
AVG
select avg(case_number)
from crime_status
where crime_type like '폭력' and status_type = '검거';
MIN
select Min(case_number)
from crime_status
where crime_type like '강도' and status_type = '발생';
- 경찰서별 강도 발생 건수가 가장 적은 경우의 강도 발생 건수
MAX
select Max(case_number)
from crime_status
where crime_type like '살인' and status_type like '검거';
- 살인이 가장 많이 검거 된 경우의 살인 검거 건수
GROUP BY
select column1, column2, ...
from table_name
where condition
group by column1, column2,..
order by column1, column2, ..;
- select > from > where > group by > order by 순으로 작성
- 그룹화하여 데이터를 조회
select police_station, sum(case_number) 발생건수
from crime_status
where status_type like '발생'
group by police_station
order by 발생건수 desc
limit 5;
- 경찰서별로 총범죄발생 건수를 발생건수 순으로 내림차순 정렬하여 상위 5개만 조회
select police_station, status_type, avg(case_number)
from crime_status
group by police_station, status_type
limit 6;
- 경찰서별 범죄상태별 평균 범죄 건수를 상위 6개만 검색
HAVING
select column1, column2,..
from table
where condition
group by column1, column2,..
having condition
order by column1, column2,..
- group by 와 order by 사이에 위치
- WHERE 절에는 집계함수를 포함시킬 수 없다
- HAVING 절 사용
select police_station, sum(case_number) count
from crime_status
where status_type like '발생'
group by police_station
having count > 4000;
- 경찰서별로 발생한 범죄 건수의 합이 4000건 보다 큰 경우 검색
select police_station, AVG(case_number)
from crime_status
where status_type like '발생' and (crime_type in ('폭력','절도'))
group by police_station
having AVG(case_number) >=2000;
- 경찰서 별로 발생한 폭력과 절도의 범죄 건수 평균이 2000 이상인 경우 검색