[AGGREGATE FUNCTIONS]
- COUNT
- SUM
- AVG
- MIN
- MAX
- FIRST : 첫 번째 결과 값 리턴
- LAST : 마지막 결과 값 리턴
- 전체 자료의 갯수가 알고 싶다. ( 전체 데이터 갯수 )
SELECT count(*) FROM police_station;
- 경찰서 갯수(종류)가 몇 개인지 알고싶다. (police_station 테이블의 name 칼럼에서 name 종류 갯수)
SELECT COUNT(DISTINCT name) FROM police_station;
- 범죄 총 건수는? (case number의 합)
SELECT sum(case_number) FROM crime_status;
- 범죄 총 발생 건수? (status type 이 발생 인 것)
SELECT sum(case_number) FROM crime_status WHERE status_type = '발생';
- 폭렴 범죄의 평균 검거 건수는?
SELECT AVG(case_number) FROM crime_status
WHERE crime_type LIKE '%폭력%' AND status_type = '검거';
- 살인이 가장 적은 건수는 몇 건?
SELECT max(case_number)
FROM crime_status
WHERE crime_type LIKE '%살인%';
- 강도 발생 건수가 가장 적은 경우 몇 건 ?
SELECT MIN(case_number) FROM crime_status
WHERE crime_type = '강도' AND status_type = '발생';
실제 결과가 그러한지 다음과 같이 조회하여 확인해볼 수 있겠다.
SELECT * FROM crime_status
WHERE crime_type = '강도' AND status_type = '발생';
중요
- 강남경찰서에서 가장 많이 발생 또는 검거된 범죄는?
다음의 질문을 해결하기 위해서는 단순히 집계 함수를 쓰는 것만으로 끝내서는 안된다.
가령
SELECT crime_type, MAX(case_number) FROM cime_status
WHERE police_station = '강남';
과 같이 검색했을 때,
가장 많이 발생 또는 사건 케이스와 그 사건 케이스의 범죄 종류가 조회되지 않을까 하고 기대할 수 있겠지만
그냥 사건 케이스와 관계 없이 가나다 순으로 범죄 종류가 조회되고,
사건 케이스 가운데 최댓값이 조회될 뿐이다.
다시 말해 자료간에 연결이 없이 조회된다.
따라서 우리는 그룹 내 최댓값을 찾기 위해 JOIN을 해주어야 한다.
다른 게시물에서 관련한 내용을 다루고자하며,
내가 참고한 게시글은 다음과 같다.
https://kukuta.tistory.com/398
P.S.2.
- 경찰서 별로 가장 많이 검거한 범죄 건수를 가장 적은 순으로 검색하세요.
이런식으로 ~~~ 별로 가장 많은 수 를 조회 하는 경우에는 다음과 같이 GROUP BY 를 이용해 쿼리를 짤 수 있다.
SELECT police_station, MAX(case_number) FROM crime_status
WHERE status_type LIKE '검거'
GROUP BY police_station
ORDER BY MAX(case_number);
조회 후에는 혹시 모르니 늘 확인하는 절차를 거치자
SELECT MAX(case_number) FROM crime_status
WHERE status_type LIKE '검거' AND police_station = '방배';
'sql' 카테고리의 다른 글
[mysql] SQL Subquery (0) | 2022.07.07 |
---|---|
[mysql] GROUP BY, HAVING (0) | 2022.07.06 |
[sql] PRIMARY KEY, FOREGIN KEY (0) | 2022.07.05 |
[mysql] LIMIT 을 쓸 때는 ORDER BY 와 함께 쓰자. (0) | 2022.07.05 |
[mysql] UNION 쓰면 전체 중복이 제거 된다는 점. (0) | 2022.07.03 |