should be it
This commit is contained in:
168
external/duckdb/test/sql/aggregate/aggregates/test_median.test
vendored
Normal file
168
external/duckdb/test/sql/aggregate/aggregates/test_median.test
vendored
Normal file
@@ -0,0 +1,168 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user