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
;