Files
email-tracker/external/duckdb/test/sql/aggregate/aggregates/test_avg.test
2025-10-24 19:21:19 -05:00

180 lines
2.7 KiB
SQL

# 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