169 lines
2.9 KiB
SQL
169 lines
2.9 KiB
SQL
# name: test/sql/aggregate/aggregates/test_median.test
|
|
# description: Test MEDIAN aggregate
|
|
# group: [aggregates]
|
|
|
|
statement ok
|
|
PRAGMA enable_verification
|
|
|
|
statement ok
|
|
PRAGMA verify_external
|
|
|
|
# scalar quantiles
|
|
query II
|
|
SELECT median(NULL), median(1)
|
|
----
|
|
NULL 1
|
|
|
|
query II
|
|
SELECT median(NULL), median(1) FROM range(2000)
|
|
----
|
|
NULL 1
|
|
|
|
statement ok
|
|
create table quantile as select range r, random() from range(10000) union all values (NULL, 0.1), (NULL, 0.5), (NULL, 0.9) order by 2;
|
|
|
|
query I
|
|
SELECT median(r)::VARCHAR FROM quantile
|
|
----
|
|
4999.5
|
|
|
|
query R
|
|
SELECT median(r::float)::VARCHAR FROM quantile
|
|
----
|
|
4999.5
|
|
|
|
query R
|
|
SELECT median(r::double)::VARCHAR FROM quantile
|
|
----
|
|
4999.5
|
|
|
|
query I
|
|
SELECT median(r::tinyint)::VARCHAR FROM quantile where r < 100
|
|
----
|
|
49.5
|
|
|
|
query I
|
|
SELECT median(r::smallint)::VARCHAR FROM quantile
|
|
----
|
|
4999.5
|
|
|
|
query I
|
|
SELECT median(r::integer)::VARCHAR FROM quantile
|
|
----
|
|
4999.5
|
|
|
|
query I
|
|
SELECT median(r::bigint)::VARCHAR FROM quantile
|
|
----
|
|
4999.5
|
|
|
|
query I
|
|
SELECT median(r::hugeint)::VARCHAR FROM quantile
|
|
----
|
|
4999.5
|
|
|
|
query I
|
|
SELECT median(r::decimal(10,2))::VARCHAR FROM quantile
|
|
----
|
|
4999.50
|
|
|
|
query I
|
|
SELECT median(case when r is null then null else [r] end)::VARCHAR FROM quantile
|
|
----
|
|
[4999]
|
|
|
|
query I
|
|
SELECT median(case when r is null then null else {'i': r} end)::VARCHAR FROM quantile
|
|
----
|
|
{'i': 4999}
|
|
|
|
# sorting order is different for varchars and numbers
|
|
# so a different result here is expected
|
|
query I
|
|
SELECT median(r::varchar) FROM quantile
|
|
----
|
|
5498
|
|
|
|
# adding a prefix
|
|
query I
|
|
SELECT median(case when r is null then null else concat('thishasalongprefix_', r::varchar) end) FROM quantile
|
|
----
|
|
thishasalongprefix_5498
|
|
|
|
query I
|
|
SELECT median(NULL) FROM quantile
|
|
----
|
|
NULL
|
|
|
|
query I
|
|
SELECT median(42) FROM quantile
|
|
----
|
|
42
|
|
|
|
|
|
#
|
|
# Validate even number of values for all types.
|
|
#
|
|
|
|
# Interpolated
|
|
foreach type <integral> DECIMAL(4,1) DECIMAL(9,1) DECIMAL(18,1) DECIMAL(38,1) float double
|
|
|
|
# We don't need to cast these values because
|
|
# they are too small for the 1% floating point margin to affect the result
|
|
query I
|
|
SELECT MEDIAN(range::${type})
|
|
FROM range(0,10);
|
|
----
|
|
4.5
|
|
|
|
endloop
|
|
|
|
foreach type date timestamp timestamp_s timestamp_ms timestamp_ns
|
|
|
|
query I
|
|
SELECT MEDIAN(range::${type})
|
|
FROM range('2024-01-01'::date, '2024-01-11'::date, INTERVAL 1 DAY);
|
|
----
|
|
2024-01-05 12:00:00
|
|
|
|
endloop
|
|
|
|
query I
|
|
SELECT MEDIAN(range::timestamptz)
|
|
FROM range('2024-01-01'::date, '2024-01-11'::date, INTERVAL 1 DAY);
|
|
----
|
|
2024-01-05 12:00:00+00
|
|
|
|
query I
|
|
SELECT MEDIAN('00:00:00'::TIME + INTERVAL (range) HOUR)
|
|
FROM range(0,10);
|
|
----
|
|
04:30:00
|
|
|
|
query I
|
|
SELECT MEDIAN(ttz::TIMETZ)
|
|
FROM (VALUES
|
|
('00:00:00-09'),
|
|
('00:00:00-08'),
|
|
('00:00:00-07'),
|
|
('00:00:00-06'),
|
|
('00:00:00-05'),
|
|
('00:00:00-04'),
|
|
('00:00:00-03'),
|
|
('00:00:00-02'),
|
|
('00:00:00-01'),
|
|
('00:00:00+00'),
|
|
) tbl(ttz);
|
|
----
|
|
00:00:00-04:30
|
|
|
|
# Floored
|
|
foreach type varchar
|
|
|
|
query I
|
|
SELECT MEDIAN(range::${type}) FROM range(0,10);
|
|
----
|
|
4
|
|
|
|
endloop
|