# 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 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