달리는 자동차

집계함수 본문

SQL/MySQL

집계함수

@또또 2020. 9. 15. 16:58

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

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

num name gender job area rank
20200001 elsa w princess arendal 5
20200002 mickey m magician usa 7
20200003 minnie w disney character usa 2
20200004 rapunzel w princess usa 3
20200005 snow white w princess usa 4
20200006 mike wazowski m Scarer japan 8
20200007 hiro m scientist usa 6
20200008 YI sun sin m general officer korea 1
20200010 cinderella m princess usa 8

데이터베이스는 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;

테이블을 만들었으니 이제 데이터를 입력한다. 만일 데이터 입력시 필드의 값을 더 늘리려 한다면 

ALTER TABLE student CHANGE name name varchar(20);
DESC student;

값 입력

INSERT INTO student VALUES(20120001,'elsa','w','princess','arendal',5);
INSERT INTO student VALUES(20120002,'mickey','m','princess','usa',7);
INSERT INTO student VALUES(20120003,'minnie','w','princess','usa',2);
INSERT INTO student VALUES(20120004,'rapunzel','w','princess','usa',3);
INSERT INTO student VALUES(20120005,'snow white','w','princess','arendal',4);
INSERT INTO student VALUES(20120006,'mike wazowski','w','princess','arendal',1);
INSERT INTO student VALUES(20120007,'hiro','w','princess','arendal',8);
INSERT INTO student VALUES(20120008,'YI sun sin','w','princess','arendal',9);

귀찮아서 데이터 아무렇게나 넣었다 위의 표처럼 생각해줬으면 좋을듯


SELECT COUNT(*) FROM student;

count
8

지역별(area)로 그룹화 한다. GROUP BY문을 사용한다. 꼭 집계함수를 쓸때 GROUP BY를 쓰는것은 아니고

어떤 필드값으로 그룹화 할때 GROUP BY를 사용한다.

SELECT area, avg(rank) FROM student GROUP BY area;
area avg(rank)
arendal
japan
korea
usa
5.0000
8.0000
1.0000
5.1429

->즉, 지역별로 그룹화 해서  area 와 avg를 보여준다.


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

특정 문자열을 가진 레코드를 검색하기 위해 사용되는 연산자는 like이며 문자열 상수에 일치하기 위한 문자

_언더스코어 와 % 퍼센트 가 제공된다.

이름이 m으로 시작하는 레코드를 찾을 때
SELECT * FROM student WHERE name LIKE 'm'%;  ->m으로 시작하는 정보를 가져온다.
SELECT * FEOM student WHERE name NOT LIKE 'm%'; -> m으로 시작하는 이름을 제외하고 다가져온다.
SELECT * FROM student WHERE area ='usa' AND name like 'm';

usa에 살면서 이름이 m으로 시작하는 사람을 모두 찾아온다.


SQL select 구문의 group by절 

GROUP BY

  • 테이블의 레코드를 grouping하기 위해 사용된다.
  • 해당 절은 각각의 그룹에 대해 하나의 행을 만드는데 이 과정을 aggregation이라 부른다.
  • GROUP BY 는 주로 aggregate function 집합함수와 함께 쓰인다. (COUNT, MAX, SUM, AVG)와 함께 쓰인다.
  • 1개 이상의 column에 대해 grouping할 수 있다.
  • select 절에는 GROUP BY에 쓰인  column만 사용가능하다.
DROP TABLE IF EXISTS Person;

CREATE TABLE IF NOT EXISTS Person(
	id SERIAL PRIMARY KEY,
    name varchar(40) NOT NULL,
    age int NOT NULL,
    gender bit(1) NOT NULL,
    city varchar(20) NOT NULL
    );
    
    INSERT INTO Person(
    	name,age,money,gender, city)
		VALUES
  	   		('Junkyu Park', 27, 50000, b'0', 'Ulsan'),
        	('Sangheon Lee', 27, 3000000, b'0', 'Ansan'),
        	('Taesung Kim', 27, 40000, b'0', 'Daegu')
            ;

SELECT * from Person;
  

여기서 GROUP BY를 통해 city 컬럼을 그룹핑 하면 city가 같은 데이터들을 하나의 데이터로 묶어버린다.

SELECT Person.city from person 
GROUP BY Person.city;

그러나 여기서 select 절에 group by 에 명시되지 않은 column을 추가하면 에러가 발생한다.

SELECT Person.city, Person.name from Person
GROUP BY Person.city; //에러 발생 -> Person.name 컬럼은 GROUP BY에 명시되어 있지 않음
  • GROUP BY를 집계함수와 함꼐 사용할 수 있다.
SELECT Person.city, SUM(Person.money) from person GROUP BY Person.city
//같은 도시에 살고 있는 사람들을 그룹핑 한 다음 그도시에 사는 사람들이 가진 돈의 총합을 구하는 쿼리이다.

rgy1989.tistory.com/entry/SQL-EXIST-NOT-EXIST

 

SQL :: EXIST , NOT EXIST

1. EXIST SELECT FROM WHERE EXIST ( SELECT 1 ... FROM ... WHERE....) - EXIST안의 조건이 "존재" 해야만 전체 결과를 출력해라 라는 의미!!!!!!!!!!!!!!!!!!!!!!!! EX) SELECT 조건1, 조건2... FROM table_Name..

rgy1989.tistory.com

exist 와 not exist 차이


b1ix.net/234

 

b1ix | [MariaDB] int(5), char(5)의 차이점 - zerofill 2015-10-28

b1ix | [MariaDB] int(5), char(5)의 차이점 - zerofill 2015-10-28

b1ix.net

int(5) 와 char(5)의 차이

요약->

테이블을 선언 할 때마다 정보에서 길이에 해당하는 값은 타입이 int와 char에 다르게 적용됩니다. int 타입의 별칭에서는 zerofill의 범위 지정으로 해당 숫자의 자릿수에 맞게 0을 채우겠다고, char 타입의 번호는 해당 숫자까지만 길이가 제한됩니다.

'SQL > MySQL' 카테고리의 다른 글

테이블 조인 (JOIN)  (0) 2020.09.15
레코드 변경 삭제  (0) 2020.09.15
필드 중복값제거  (0) 2020.09.15
테이블 생성  (0) 2020.09.14
데이터 형 과 저장크기  (0) 2020.09.14
Comments