Programming/Postgres DB
[PostgresDB] 6. Aggregate Function (feat. SUM, AVG, MIN, MAX)
midnightcoder
2022. 12. 15. 02:43
데이터 준비
-- 테이블 생성
CREATE TABLE transactions (
id INTEGER, -- 거래 고유 번호
amount DECIMAL(12, 2), -- 거래 금액(총 12자리 숫자, 소수점 이하 2자리까지)
msg VARCHAR(15), -- 최대 15자리 글자
created_at TIMESTAMPTZ -- 거래 시각(+타임존)
);
-- 레코드 등록
INSERT INTO
transactions(id, amount, msg, created_at)
VALUES
(1, -24.20, 'Google', '2021-11-01 10:02:48'),
(2, -36.30, 'Amazon', '2021-11-02 10:01:05'),
(3, 557.13, 'Udemy', '2021-11-10 11:00:09'),
(4, -684.04, 'Bank of America', '2021-11-15 17:30:16'),
(5, 495.71, 'PayPal', '2021-11-26 10:30:20'),
(6, 726.87, 'Google', '2021-11-26 10:31:04'),
(7, 124.71, 'Amazon', '2021-11-26 10:32:02'),
(8, -24.20, 'Google', '2021-12-01 10:00:21'),
(9, -36.30, 'Amazon', '2021-12-02 10:03:43'),
(10, 821.63, 'Udemy', '2021-12-10 11:01:19'),
(11, -837.25, 'Bank of America', '2021-12-14 17:32:54'),
(12, 695.96, 'PayPal', '2021-12-27 10:32:02'),
(13, 947.20, 'Google', '2021-12-28 10:33:40'),
(14, 231.97, 'Amazon', '2021-12-28 10:35:12'),
(15, -24.20, 'Google', '2022-01-03 10:01:20'),
(16, -36.30, 'Amazon', '2022-01-03 10:02:35'),
(17, 1270.87, 'Udemy', '2022-01-10 11:03:55'),
(18, -540.64, 'Bank of America', '2022-01-14 17:33:01'),
(19, 732.33, 'PayPal', '2022-01-25 10:31:21'),
(20, 1328.72, 'Google', '2022-01-26 10:32:45'),
(21, 824.71, 'Amazon', '2022-01-27 10:33:01'),
(22, 182.55, 'Coupang', '2022-01-27 10:33:25'),
(23, -24.20, 'Google', '2022-02-03 10:02:23'),
(24, -36.30, 'Amazon', '2022-02-03 10:02:34'),
(25, -36.30, 'Notion', '2022-02-03 10:04:51'),
(26, 1549.27, 'Udemy', '2022-02-14 11:00:01'),
(27, -480.78, 'Bank of America', '2022-02-14 17:30:12')
;
-- 레코드 조회
SELECT * FROM transactions;
Data type 중에 DECIMAL 과 TIMESTAMPTZ가 새로 보인다
DECIMAL(총 숫자 자리수, 소수점 자리) 이 형식으로 표현
e.g.
DECIMAL(10,2) -- 총 10자리 숫자, 소수점 이하 2자리 까지
TIMESTAMPTZ 날짜 + 시간을 나타내는 타입
- 거래 내역의 총합 : SUM(더하고 하는 column)
-- A. 거래 내역의 총합은?
SELECT
SUM(amount)
FROM
transactions
;
결과
- 최대 거래 금액과 최저 거래 금액 : MIN(column) & MAX(column)
-- B. 최대 거래 금액과 최저 거래 금액
SELECT
MIN(amount),
MAX(amount)
FROM
transactions
;
- 'Google' 과 거래한 총 횟수는 ?
-- C. 'Google'과 거래한 총 횟수는?
SELECT
COUNT(*)
FROM
transactions
WHERE
msg = 'Google'
;
결과
- 거래 내역의 평균 금액은 ?
-- D. 거래 내역의 평균 금액?
SELECT
AVG(amount)
FROM
transactions
;
단, 위의 숫자를 소수점 2째 자리까지 표현하려면 ROUND(타켓, 소수점자리) 를 사용
ROUND(AVG(amount), 2)
- 거래 메시지 목록을 중복되지 않게 추출하려면? DISTINCT(column) 함수 사용
-- E. 거래 메세지 목록을 중복되지 않게 추출하면?
SELECT
DISTINCT(msg)
FROM
transactions
;