# name: test/sql/aggregate/aggregates/test_avg.test # description: Test AVG operator # group: [aggregates] # scalar average query RR SELECT AVG(3), AVG(NULL) ---- 3 NULL query RR SELECT AVG(3::SMALLINT), AVG(NULL::SMALLINT) ---- 3 NULL query RR SELECT AVG(3::DOUBLE), AVG(NULL::DOUBLE) ---- 3 NULL # test average on sequence statement ok CREATE SEQUENCE seq; query R SELECT AVG(nextval('seq')) ---- 1 query R SELECT AVG(nextval('seq')) ---- 2 statement ok CREATE TABLE integers(i INTEGER); statement ok INSERT INTO integers VALUES (1), (2), (3) query RRRR SELECT AVG(i), AVG(1), AVG(DISTINCT i), AVG(NULL) FROM integers ---- 2 1 2 NULL query R SELECT AVG(i) FROM integers WHERE i > 100 ---- NULL # Intervals statement ok CREATE TABLE intervals(itvl INTERVAL) statement ok INSERT INTO intervals VALUES ('1 day'), ('30 days'), ('30 days'), ('30 days'), ('30 days') query II SELECT AVG(itvl), AVG(DISTINCT itvl) FROM intervals ---- 24 days 04:48:00 15 days 12:00:00 # The only test of AVG(INTERVAL) in the PG test suite... statement ok CREATE TABLE interval_tbl (f1 interval); statement ok INSERT INTO interval_tbl (f1) VALUES ('@ 1 minute'), ('@ 5 hour'), ('@ 10 day'), ('@ 34 year'), ('@ 3 months'), ('@ 14 seconds ago'), ('1 day 2 hours 3 minutes 4 seconds'), ('6 years'), ('5 months'), ('5 months 12 hours'); query I select avg(f1) from interval_tbl; ---- 4 years 1 month 10 days 04:18:23 # invalid use of average statement error SELECT AVG() ---- statement error SELECT AVG(1, 2, 3) ---- statement error SELECT AVG(AVG(1)) ---- # empty average statement ok CREATE TABLE vals(i INTEGER, j DOUBLE, k HUGEINT); statement ok INSERT INTO vals VALUES (NULL, NULL, NULL) query III SELECT AVG(i), AVG(j), AVG(k) FROM vals; ---- NULL NULL NULL # Temporal values statement ok CREATE OR REPLACE TABLE timestamps AS SELECT range AS ts FROM range('2024-11-01'::DATE, '2024-12-01'::DATE, INTERVAL 1 DAY) query I SELECT AVG(ts::DATE) FROM timestamps ---- 2024-11-15 12:00:00 query I SELECT AVG(ts) FROM timestamps ---- 2024-11-15 12:00:00 query I SELECT AVG(ts::TIMESTAMPTZ) FROM timestamps ---- 2024-11-15 12:00:00+00 statement ok CREATE OR REPLACE TABLE times AS SELECT range AS ts FROM range('2024-11-01'::DATE, '2024-11-02'::DATE, INTERVAL 7 MINUTES) query I SELECT AVG(ts::TIME) FROM times ---- 11:57:30 # TIMETZ - just average the normalised times statement ok CREATE TABLE timetzs (ttz TIMETZ); statement ok INSERT INTO timetzs VALUES (NULL), ('00:00:00+1559'), ('00:00:00+1558'), ('02:30:00'), ('02:30:00+04'), ('02:30:00+04:30'), ('02:30:00+04:30:45'), ('16:15:03.123456'), ('02:30:00+1200'), ('02:30:00-1200'), ('24:00:00-1558'), ('24:00:00-1559'), ; query I SELECT AVG(ttz) FROM timetzs; ---- 14:44:56.193041+00