서버 개발/MySQL

MySQL - (2) 집계함수

Johnny Yoon 2019. 8. 8. 19:32
728x90
반응형

 

 

 

MySQL 포스팅

(1) SELECT

(2) 집계함수

(3) VIEW

(4) 윈도우 함수

(5) 데이터 갱신

(6) 조건 분기

(7) JOIN


집계함수

모든 분석 언어들이 그렇듯, 기술통계적 집계 함수들이 존재합니다.

이번 포스팅에서는 MySQL에서 제공하는 기본 집계나 정렬 함수들을 알아보겠습니다.

 

ORDER BY

ORDER BY는 이름에서도 알 수 있듯이 정렬하는 함수 입니다.

ORDER BY의 기본 문법은 다음과 같습니다.

SELECT [컬럼명 ...] 
FROM 테이블명 
ORDER BY 컴럼명 ASC|DESC;

 

테이블 전체의 레코드를 여러가지 방식으로 정렬해 보도록 하겠습니다.

다음은 id를 사용해 모든 레코드를 내림차순으로 정렬하는 쿼리 입니다.

SELECT * FROM customers
ORDER BY CustomerID DESC;

위 쿼리의 결과중 상위 5개는 다음과 같습니다.

 

다음은 한개의 컬럼이 아닌 두개의 컬럼을 사용해 정렬 한 예제 입니다.

문자열을 비교할 때는 각 문자의 순서를 사용합니다.

SELECT * FROM customers
ORDER BY Country, CustomerID DESC;

결과 값을 보면, Country로는 오름차순, CustomerID로는 내림차순으로 정렬한 것을 볼 수 있습니다.

만약 둘다 내림차순으로 정렬하기를 원한다면, Country 뒤에도 DESC를 붙여주면 됩니다.

위 쿼리의 결과중 상위 5개는 다음과 같습니다.

 

GROUP BY

GROUP BY 함수를 이용한 뒤 여러 집계 함수들을 사용하면 간편하게 집계를 뽑아볼 수 있습니다.

GROUP BY의 기본적인 문법은 다음과 같습니다.

SELECT [컬럼명 ...] 
FROM 테이블명 
GROUP BY 컴럼명;

 

SQL에서 지원하는 대표적인 집계 함수들은 다음과 같습니다.

함수 이름 설명
COUNT 레코드 수를 계산
SUM 숫자를 더함
AVG 평균을 구함
MAX 최대값을 구함
MIN 최소값을 구함

 

아래 쿼리를 사용하면, 나라에 대한 각 레코드를 카운트 하고, 나라로 그룹핑을 하게 됩니다.

SELECT Country, count(*)
FROM customers
GROUP BY Country;

위 쿼리의 결과중 상위 5개는 다음과 같습니다.

 

참고로 GROUP BY를 지정하지 않고도 COUNT를 할 수 있는데, 이 때는 집계함수만을 select해야 합니다.

아래는 모든 레코드를 카운트하는 함수 입니다.

SELECT count(*)
FROM customers;

위 쿼리의 결과는 다음과 같습니다.

 

HAVING

HAVING구는 GROUP BY의 집계에 사용하는 WHERE구 같은 것입니다.

집계를 실행한 구절에 조건을 넣어 결과를 필터링 할 수 있습니다.

기본적인 문법은 다음과 같습니다.

SELECT [컬럼명 ...] 
FROM 테이블명 
GROUP BY 컴럼명
HAVING 조건;

 

아래의 함수는 레코드의 카운트가 5인 결과만 집계하는 쿼리입니다.

SELECT Country, COUNT(*)
FROM customers
GROUP BY Country
HAVING COUNT(*) = 5;

위 쿼리의 결과는 다음과 같습니다.

여기까지 집계나 정렬에 관련된 함수들을 알아봤습니다.

 


MySQL 포스팅

(1) SELECT

(2) 집계함수

(3) VIEW

(4) 윈도우 함수

(5) 데이터 갱신

(6) 조건 분기

(7) JOINJOIN

 


참고자료

https://www.w3schools.com/sql

728x90
반응형

'서버 개발 > MySQL' 카테고리의 다른 글

MySQL - (6) 조건분기  (0) 2019.08.10
MySQL - (5) 데이터 갱신  (0) 2019.08.10
MySQL - (4) 윈도우 함수  (0) 2019.08.10
MySQL - (3) VIEW  (0) 2019.08.09
MySQL - (1) SELECT  (0) 2019.08.08