과일 가게에서 판매하고 있는 과일은 [수박], [사과], [오렌지] 라고 특정할때, 날짜 별로 과일들의 수량을 계산하여 통계치를 구하려고 한다.
왼쪽은 과일이 판매될때 마다 작성한 데이터이고, 오른쪽은 구하고자 하는 결과 데이터이다.
■ 작업
첫번째, 과일 가게 가계부 테이블를 생성한다.
CREATE TABLE `tbl_fruit_shop` (
`pay_time` date NOT NULL COMMENT '구매 날짜',
`fruit` varchar(50) NOT NULL COMMENT '과일',
`cnt` int(11) NOT NULL COMMENT '수량'
)
반응형
두번째, 과일 가게 가계부 테이블를 조회했을 때 결과를 확인한다.
* 결과 데이터는 [예시]의 왼쪽 데이터와 동일하다고 가정한다.
결과)
세번째, 각 행을 과일 별로 구분하여 데이터를 출력한다.
* [CASE 문] 을 통해 행으로 구분되어 있던 데이터를 열로 수정
SELECT pay_time,
CASE WHEN fruit='수박' THEN cnt END AS 수박,
CASE WHEN fruit='사과' THEN cnt END AS 사과,
CASE WHEN fruit='오렌지' THEN cnt END AS 오렌지
FROM tbl_fruit_shop
ORDER BY pay_time
반응형
결과)
네번째, 날짜 별로 과일들의 수량을 합산한다.
* [SUM 함수] 와 [GROUP BY 문법]을 통해 데이터를 그룹화 함과 동시에 과일별 수량 합산
SELECT pay_time,
SUM(CASE WHEN fruit='수박' THEN cnt END) AS 수박,
SUM(CASE WHEN fruit='사과' THEN cnt END) AS 사과,
SUM(CASE WHEN fruit='오렌지' THEN cnt END) AS 오렌지
FROM tbl_fruit_shop
GROUP BY pay_time
ORDER BY pay_time
결과)
다섯째, 날짜 별로 판매되지 않은 과일의 수량은 0으로 치환한다.
* [COALESCE 함수]를 이용하여 NULL인 데이터는 0으로 치환
SELECT pay_time,
COALESCE(SUM(CASE WHEN fruit='수박' THEN cnt END), 0) AS 수박,
COALESCE(SUM(CASE WHEN fruit='사과' THEN cnt END), 0) AS 사과,
COALESCE(SUM(CASE WHEN fruit='오렌지' THEN cnt END), 0) AS 오렌지
FROM tbl_fruit_shop
GROUP BY pay_time
ORDER BY pay_time
PostgreSQL은 오픈 소스 객체-관계형 데이터베이스 시스템(ORDBMS)으로, Enterprise급 DBMS의 기능과 차세대 DBMS에서나 볼 수 있을 법한 기능들을 제공한다.약 20여년의 오랜 역사를 갖는 PostgreSQL은 다른 관계형 데이터베이스 시스템과 달리 연산자, 복합 자료형, 집계 함수, 자료형 변환자, 확장 기능 등 다양한 데이터베이스 객체를 사용자가 임의로 만들 수 있는 기능을 제공함으로써 마치 새로운 하나의 프로그래밍 언어처럼 무한한 기능을 손쉽게 구현할 수 있다.
■ 포스트그레스큐엘(PostgreSQL)의 특징
1) 유연한 객체 생성
다른 관계형 데이터베이스 시스템과 달리, 연산자, 복합 자료형, 집계 함수, 자료형 변환자, 확장 기능 등 다양한 데이터베이스 객체를 사용자가 임의로 만들 수 있는 기능을 SQL 차원에서 제공한다.
이런 특징은 단순한 자료 저장소로써의 기능을 넘어 마치 하나의 새로운 프로그래밍 언어처럼 개발자의 창의성에 따라 무한한 기능을 손쉽게 구현할 수 있도록 한다.
2) 상속
java 또는 C++ 프로그래밍 언어와 같이 테이블을 만들어 그 테이블 상속 기능을 이용해 하위 테이블을 만들 수 있다.
테이블에 저장된 자료는 상위 테이블을 조회하면, 해당 테이블의 하위 테이블에 포함된 모든 자료를 조회할 수 있으며, 하위 테이블을 만들 때, 상위 테이블의 칼럼을 그대로 상속 받으면서, 하위 테이블에만 속하는 칼럼을 추가로 만들 수 있다.
3) 함수
때때로, '저장 프로시저'라고 불리는 SQL문으로 작성된 함수를 서버환경에서 사용할 수 있다. 비록 다른 언어와는 달리 제어문과 반복문을 사용하지는 못하지만, 다른 언어와 결합시킬 수 있다. 일부 언어에서는 심지어 트리거 내부에서 실행시킬 수 있다.
이러한 언어의 예는 다음과 같다.
PL/pgSQL (오라클의 PL/SQL과 유사하다)
스크립트 언어를 통한 지원 (예, PL/Python, PL/php, PL/Perl)
컴파일 언어를 통한 지원 (예, C/C++, PL/Java)
통계적 언어를 통한 지원 (예, PL/R)
PostgreSQL은 테이블에 대한 질의 결과를 반환하기 위한 '행 반환 함수'를 지원한다.