집계 이해하기
뷰(view)
-- 하나 이상의 테이블을 결합해 만든 가상의 테이블
-- SELECT와 조건 구문 등을 통해 쿼리로서 가상의 테이블로 생성한다.
뷰의 특징
-- 원본 테이블 레코드 값에 따라 뷰 레코드도 같이 변화가 일어남
-- 기존 테이블 변경없이 새로운 데이터 구조 사용 가능
-- 특정 레코드에 대한 노출이 필요한 경우 장점
뷰의 단점
-- 뷰에 독립적인 인덱스 생성이 어려움
-- 한번 생성된 뷰의 속성 변경이 안됨
ALTER VIEW문을 사용할 수 없다
즉, 뷰의 정의를 변경할 수 없다
-- 삽입, 삭제 갱신 연산에 많은 제약이 따름
테이블 기본키를 포함한 속성 뷰에서 삽입, 삭제, 갱신이 가능
뷰의 장점
-- 편리성 및 재사용성
-- 보안
-- 논리적 독립성
뷰의 편리함
테이블에서 집계함수, 다중조건을 사용하는 SQL 질의를 사용할 때
예) CREATE VIEW 구문 사용
CREATE VIEW v_orders
AS SELECT ordered, O.custid, username, O.bookid, saleprice, orderdate
FROM customer C, Orders O, Book B
WHERE C.custid = O.custid and B.bookid = O.bookid;
CREATE VIEW 구문
CREATE VIEW view_name[(column_list)]
AS SELECT 구문
[WITH[CASCADED | LOCAL] CHECK OPTION]
-- SELECT 구문
--> JOIN, SUBQUERY 및 제약사항을 포함한 쿼리
CREATE OF REPLACE VIEW 구문
CREATE OR REPLACE VIEW view_name[(column_list)]
AS SELECT 구문
[WITH[CASCADED | LOCAL] CHECK OPTION]
-- CREATE 구문으로 view_name에 따라서 새로운 뷰로 생성된다.
DROP VIEW 구분
-- CREATE 구문으로 view_name에 따라서 새로운 뷰로 생성된다
DROP VIEW view_name
집계함수
내장함수 | 설명 |
ABS(숫자) | 숫자 절대값 출력 |
CEILING(숫자) | 숫자보다 크거나 같은 최소 정수 값 |
FLOOR(숫자) | 숫자 값 보다 작은 정수 중 가장 큰수 -> 실수는 무조건 버림, 음수일 경우는 제외 |
ROUND(숫자, 자릿수) | 숫자를 소수점 이하 자릿수에서 반올림(자릿수는 양수, 0, 음수) |
GREATEST(숫자1, 숫자2...) | 주어진 수 중 제일 큰 수 리턴 |
LEAST(숫자1, 숫자2...) | 주어진 수 중 제일 작은 수 리턴 |
예시
mysql>SELECT CEILING(30,75); >> 31
기간 집계 함수
기간 함수 | 설명 |
DAYOFYEAR(날짜) | 일년을 기준으로 날짜까지의 날짜 수 |
DAYOFWEEK(날짜) | 요일(1: 일 ~ 7:토) 반환 |
WEEKOFYEAR(날짜) | 날짜의 주 수(0~53)를 반환한다. WEEK(date,3)호환 |
YEARWEEK(날짜[,mode]) | 월의 영문(January ~ December) 반환 |
WEEK(날짜[,mode]) | 일년 중 몇 번째 주 |
QUATER(날짜) | 날짜가 4분기 중에서 몇 분기인지 반환 |
DATE_FORMAT(날짜,format) | dt 속성을 날짜형식 format으로 반환 |
mode 값
mysql > SELECT WEEKOFYEAR('2021-01-01'); -- 2020년의 53주
53
VIEW와 집계함수
-- 반복적, 지속적, 주기적 쿼리를 VIEW로 생성해서 단순한 SELECT로 만들어 집계 결과를 얻고자함
예시)
주별로 판매액의 최소, 최대 값을 알아보자
CREATE OF REPLACE VIEW v_Weekly(Weekly, Date, MIN, MAX)
AS SELECT YEARWEEK(orderdate) Weekly, orderdate 'Date'.
MIN(saleprice) MIN, MAX(saleprice) MAX
FROM Orders
GROUP BY YEARWEEK(orderdate);