집계함수

집계함수는 결과 레코드들에 대한 레코드의 개수, 값들의 합, 평균, 최대값, 최소값 등의 산술적인 연산을 한 결과값을 출력한다.

다음은 MySQL에서의 집계함수 목록이다.

집계함수 의미
count(필드명) null 값이 아닌 레코드의 수
sum(필드명) 필드명의 값들의 합계
avg(필드명) 필드명의 값들의 평균
max(필드명) 필드명의 값들 중 가장 큰 값
main(필드명) 필드명의 값들 중 가장 작 값
count(*)
*은 모든것을 의미
레코드의 개수

지금부터 배울 집계함수를 배우기 위해서는 새로운 테이블을 만들어야 합니다.

그럼 아래의 테이블을 만들어보죠

num name gender job area email rank
20200001 elsa w princess arendal elsa@coreasur.com 5
20200002 mickey m magician usa mickey@coreasur.com 7
20200003 minnie w disney character usa minnie@coreasur.com 2
20200004 rapunzel w princess usa rapunzel@coreasur.com 3
20200005 snow white w princess usa snow@coreasur.com 4
20200006 mike wazowski m Scarer usa wazo@coreasur.com 5
20200007 hiro m scientist usa bighero@coreasur.com 6
20200008 Yi Sun sin m general officer korea korea@coreasur.com 1
20200009 honda souichiro m engineer japan honda@coreasur.com 8
20200010 cinderella w princess usa bibidibabidiboo@coreasur.com 9

데이터베이스는 study_db , 테이블명은 student로 하겠습니다.

그럼 먼저 데이터베이스를 생성해 주세요.

CREATE DATABASE study_db;

그럼 테이블을 만들겠습니다. study_db를 선택해 주세요.

USE study_db;

다음은 student로 테이블 생성 명령문입니다.

CREATE TABLE `student` (
    `num` int(11) NOT NULL,
    `name` varchar(10) DEFAULT NULL,
    `gender` char(1) DEFAULT NULL,
    `job` varchar(20) DEFAULT NULL,
    `area` varchar(15) DEFAULT NULL,
    `email` varchar(50) DEFAULT NULL,
    `rank` int(11) DEFAULT NULL,
    PRIMARY KEY (`num`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

테이블을 만들었으니 이제 데이터를 입력하겠습니다.

INSERT INTO student VALUES(20120001, 'elsa', 'w', 'princess', 'arendal', 'elsa@coreasur.com', 5);
INSERT INTO student VALUES(20200002, 'mickey', 'm', 'magician', 'usa', 'mickey@coreasur.com', 7);
INSERT INTO student VALUES(20200003, 'minnie', 'w', 'disney character', 'usa', 'minnie@coreasur.com', 2);
INSERT INTO student VALUES(20200004, 'rapunzel', 'w', 'princess', 'usa', 'rapunzel@coreasur.com', 3);
INSERT INTO student VALUES(20120005, 'snow white', 'w', 'princess', 'usa', 'snow@coreasur.com', 4);
INSERT INTO student VALUES(20200006, 'mike wazowski', 'w', 'Scarer', 'usa', 'wazo@coreasur.com', 5);
INSERT INTO student VALUES(20200007, 'hiro', 'm', 'scientist', 'usa', 'bighero@coreasur.com', 6);
INSERT INTO student VALUES(20200008, 'Yi Sun sin', 'm', 'general officer', 'korea', 'korea@coreasur.com', 1);
INSERT INTO student VALUES(20200009, 'honda souichiro', 'm', 'engineer', 'japan', 'honda@coreasur.com', 8);
INSERT INTO student VALUES(20200010, 'cinderella', 'w', 'princess', 'usa', 'bibidibabidiboo@coreasur.com', 9);

위의 명령문을 입력합시다.

mike wazoski와 honda souichiro는 문자열의 길이가 name필드에 설정된 값보다 길어서 오류가 발생했습니다.

mysql image mysql image

name 필드의 값을 더 늘립니다. varchar(10)을 varchar(20)으로 변경합니다.

ALTER TABLE student CHANGE name name varchar(20);
DESC student;
SELECT * FROM student;

그럼 이제 집계함수에 대해서 공부해보도록 하죠!!

전체 학생의 수를 검색 해 봅시다.

아래의 명령어를 입력

SELECT COUNT(*) FROM student;

그럼 이번엔 각 지역별 랭킹 순위를 구해봅시다.
지역별(area)로 그룹화 합니다. GROUP BY 문을 사용합니다.

SELECT area, avg(rank) FROM student GROUP BY area;

위의 명령문은 보일 필드는 area와 rank입니다.

평균값을 보기 위해 avg함수를 사용했고 rank값들의 area별 평균값이 나타납니다.

위에 보듯이 각 전공별로 재산이 합해져서 나왔습니다.

이번에는 특정 문자열을 가진 레코드를 검색해봅시다.

특정 문자열을 가진 레코드를 검색하기 위해 사용되는 연산자는 like이며, 문자열 상수에 일치하기 위한 문자 '_'(언더스코어)와 %(퍼센트)가 제공된다.

_ 임의의 한문자 (한글의 경우 2바이트이므로 2개 사용)

% 퍼센트 (임의의 여러 문자(숫자0을 포함)

그럼 이름이 m으로 시작하는 레코드를 찾아봅시다.

이거 레코드검색에서 했던거죠^^

SELECT * FROM student WHERE name LIKE 'm%';

like 대신에 not like를 사용해봅시다.

SELECT * FROM student WHERE name NOT LIKE 'm%';

m으로 시작하는 이름을 제외하고서 다 검색되죠^^

이렇게도 가능합니다. 이름끝에 o가 들어있지 않는 사람 찾기




SELECT * FROM student WHERE name NOT LIKE '%o';

이번에는 이름이 4글자 이면서 이름끝에 o가 들어가는 사람을 찾아봅시다._(언더바)를 3회 사용합니다.

SELECT * FROM student WHERE name LIKE '___o';

그럼 이번에 usa에사는 이름이 m으로 시작하는 가진 사람을 찾아봅시다.

SELECT * FROM student WHERE area = 'usa' AND name LIKE 'm%';

다음강좌 에서는 레코드 변경 및 삭제에 대해서 알아봅시다.!!

현재까지의 db 백업 (아래는 현재까지의 작업을 백업한거라서 중도에 들어오신분들을 위한거에요.)

david_db smart study_db