Skip to content

Commit a8852af

Browse files
committed
add median cases with nulls.
1 parent b0b8812 commit a8852af

File tree

1 file changed

+189
-34
lines changed

1 file changed

+189
-34
lines changed

datafusion/sqllogictest/test_files/aggregate.slt

Lines changed: 189 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,35 @@ CREATE TABLE test (c1 BIGINT,c2 BIGINT) as values
6868
(0,null), (1,1), (null,1), (3,2), (3,2)
6969

7070
statement ok
71-
CREATE TABLE group_median_table (
72-
col_group STRING,
71+
CREATE TABLE group_median_table_non_nullable (
72+
col_group STRING NOT NULL,
73+
col_i8 TINYINT NOT NULL,
74+
col_i16 SMALLINT NOT NULL,
75+
col_i32 INT NOT NULL,
76+
col_i64 BIGINT NOT NULL,
77+
col_u8 TINYINT UNSIGNED NOT NULL,
78+
col_u16 SMALLINT UNSIGNED NOT NULL,
79+
col_u32 INT UNSIGNED NOT NULL,
80+
col_u64 BIGINT UNSIGNED NOT NULL,
81+
col_f32 FLOAT NOT NULL,
82+
col_f64 DOUBLE NOT NULL,
83+
col_f64_nan DOUBLE NOT NULL,
84+
col_decimal128 DECIMAL(10, 4) NOT NULL,
85+
col_decimal256 NUMERIC(10, 4) NOT NULL
86+
) as VALUES
87+
( 'group0', -128, -32768, -2147483648, arrow_cast(-9223372036854775808,'Int64'), 0, 0, 0, arrow_cast(0,'UInt64'), 1.1, 1.1, 1.1, 0.0001, 0.0001 ),
88+
( 'group0', -128, -32768, -2147483648, arrow_cast(-9223372036854775808,'Int64'), 0, 0, 0, arrow_cast(0,'UInt64'), 4.4, 4.4, 1.1, 0.0002, 0.0002 ),
89+
( 'group0', 100, 100, 100, arrow_cast(100,'Int64'), 100, 100, 100, arrow_cast(100,'UInt64'), 3.3, 3.3, arrow_cast('NAN','Float64'), 0.0003, 0.0003 ),
90+
( 'group0', 127, 32767, 2147483647, arrow_cast(9223372036854775807,'Int64'), 255, 65535, 4294967295, 18446744073709551615, 2.2, 2.2, arrow_cast('NAN','Float64'), 0.0004, 0.0004 ),
91+
( 'group1', -128, -32768, -2147483648, arrow_cast(-9223372036854775808,'Int64'), 0, 0, 0, arrow_cast(0,'UInt64'), 1.1, 1.1, 1.1, 0.0001, 0.0001 ),
92+
( 'group1', -128, -32768, -2147483648, arrow_cast(-9223372036854775808,'Int64'), 0, 0, 0, arrow_cast(0,'UInt64'), 4.4, 4.4, arrow_cast('NAN','Float64'), 0.0002, 0.0002 ),
93+
( 'group1', 100, 100, 100, arrow_cast(100,'Int64'), 101, 100, 100, arrow_cast(100,'UInt64'), 3.3, 3.3, arrow_cast('NAN','Float64'), 0.0003, 0.0003 ),
94+
( 'group1', 125, 32766, 2147483646, arrow_cast(9223372036854775806,'Int64'), 100, 101, 4294967294, arrow_cast(100,'UInt64'), 3.2, 5.5, arrow_cast('NAN','Float64'), 0.0004, 0.0004 ),
95+
( 'group1', 127, 32767, 2147483647, arrow_cast(9223372036854775807,'Int64'), 255, 65535, 4294967295, 18446744073709551615, 2.2, 2.2, arrow_cast('NAN','Float64'), 0.0005, 0.0005 )
96+
97+
statement ok
98+
CREATE TABLE group_median_table_nullable (
99+
col_group STRING NOT NULL,
73100
col_i8 TINYINT,
74101
col_i16 SMALLINT,
75102
col_i32 INT,
@@ -80,17 +107,21 @@ CREATE TABLE group_median_table (
80107
col_u64 BIGINT UNSIGNED,
81108
col_f32 FLOAT,
82109
col_f64 DOUBLE,
83-
col_f64_nan DOUBLE
110+
col_f64_nan DOUBLE,
111+
col_decimal128 DECIMAL(10, 4),
112+
col_decimal256 NUMERIC(10, 4)
84113
) as VALUES
85-
( 'group0', -128, -32768, -2147483648, arrow_cast(-9223372036854775808,'Int64'), 0, 0, 0, arrow_cast(0,'UInt64'), 1.1, 1.1, 1.1 ),
86-
( 'group0', -128, -32768, -2147483648, arrow_cast(-9223372036854775808,'Int64'), 0, 0, 0, arrow_cast(0,'UInt64'), 4.4, 4.4, 1.1 ),
87-
( 'group0', 100, 100, 100, arrow_cast(100,'Int64'), 100, 100, 100, arrow_cast(100,'UInt64'), 3.3, 3.3, arrow_cast('NAN','Float64') ),
88-
( 'group0', 127, 32767, 2147483647, arrow_cast(9223372036854775807,'Int64'), 255, 65535, 4294967295, 18446744073709551615, 2.2, 2.2, arrow_cast('NAN','Float64') ),
89-
( 'group1', -128, -32768, -2147483648, arrow_cast(-9223372036854775808,'Int64'), 0, 0, 0, arrow_cast(0,'UInt64'), 1.1, 1.1, 1.1 ),
90-
( 'group1', -128, -32768, -2147483648, arrow_cast(-9223372036854775808,'Int64'), 0, 0, 0, arrow_cast(0,'UInt64'), 4.4, 4.4, arrow_cast('NAN','Float64') ),
91-
( 'group1', 100, 100, 100, arrow_cast(100,'Int64'), 101, 100, 100, arrow_cast(100,'UInt64'), 3.3, 3.3, arrow_cast('NAN','Float64') ),
92-
( 'group1', 125, 32766, 2147483646, arrow_cast(9223372036854775806,'Int64'), 100, 101, 4294967294, arrow_cast(100,'UInt64'), 3.2, 5.5, arrow_cast('NAN','Float64') ),
93-
( 'group1', 127, 32767, 2147483647, arrow_cast(9223372036854775807,'Int64'), 255, 65535, 4294967295, 18446744073709551615, 2.2, 2.2, arrow_cast('NAN','Float64') )
114+
( 'group0', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ),
115+
( 'group0', -128, -32768, -2147483648, arrow_cast(-9223372036854775808,'Int64'), 0, 0, 0, arrow_cast(0,'UInt64'), 1.1, 1.1, 1.1, 0.0001, 0.0001 ),
116+
( 'group0', -128, -32768, -2147483648, arrow_cast(-9223372036854775808,'Int64'), 0, 0, 0, arrow_cast(0,'UInt64'), 4.4, 4.4, 1.1, 0.0002, 0.0002 ),
117+
( 'group0', 100, 100, 100, arrow_cast(100,'Int64'), 100, 100, 100, arrow_cast(100,'UInt64'), 3.3, 3.3, arrow_cast('NAN','Float64'), 0.0003, 0.0003 ),
118+
( 'group0', 127, 32767, 2147483647, arrow_cast(9223372036854775807,'Int64'), 255, 65535, 4294967295, 18446744073709551615, 2.2, 2.2, arrow_cast('NAN','Float64'), 0.0004, 0.0004 ),
119+
( 'group1', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ),
120+
( 'group1', -128, -32768, -2147483648, arrow_cast(-9223372036854775808,'Int64'), 0, 0, 0, arrow_cast(0,'UInt64'), 1.1, 1.1, 1.1, 0.0001, 0.0001 ),
121+
( 'group1', -128, -32768, -2147483648, arrow_cast(-9223372036854775808,'Int64'), 0, 0, 0, arrow_cast(0,'UInt64'), 4.4, 4.4, arrow_cast('NAN','Float64'), 0.0002, 0.0002 ),
122+
( 'group1', 100, 100, 100, arrow_cast(100,'Int64'), 101, 100, 100, arrow_cast(100,'UInt64'), 3.3, 3.3, arrow_cast('NAN','Float64'), 0.0003, 0.0003 ),
123+
( 'group1', 125, 32766, 2147483646, arrow_cast(9223372036854775806,'Int64'), 100, 101, 4294967294, arrow_cast(100,'UInt64'), 3.2, 5.5, arrow_cast('NAN','Float64'), 0.0004, 0.0004 ),
124+
( 'group1', 127, 32767, 2147483647, arrow_cast(9223372036854775807,'Int64'), 255, 65535, 4294967295, 18446744073709551615, 2.2, 2.2, arrow_cast('NAN','Float64'), 0.0005, 0.0005 )
94125

95126
#######
96127
# Error tests
@@ -6233,79 +6264,203 @@ physical_plan
62336264
# Group median test
62346265
#######
62356266

6236-
# group median i8
6267+
# group median i8 non-nullable
62376268
query TI rowsort
6238-
SELECT col_group, median(col_i8) FROM group_median_table GROUP BY col_group
6269+
SELECT col_group, median(col_i8) FROM group_median_table_non_nullable GROUP BY col_group
62396270
----
62406271
group0 -14
62416272
group1 100
62426273

6243-
# group median i16
6274+
# group median i16 non-nullable
62446275
query TI
6245-
SELECT col_group, median(col_i16) FROM group_median_table GROUP BY col_group
6276+
SELECT col_group, median(col_i16) FROM group_median_table_non_nullable GROUP BY col_group
62466277
----
62476278
group0 -16334
62486279
group1 100
62496280

6250-
# group median i32
6281+
# group median i32 non-nullable
62516282
query TI
6252-
SELECT col_group, median(col_i32) FROM group_median_table GROUP BY col_group
6283+
SELECT col_group, median(col_i32) FROM group_median_table_non_nullable GROUP BY col_group
62536284
----
62546285
group0 -1073741774
62556286
group1 100
62566287

6257-
# group median i64
6288+
# group median i64 non-nullable
62586289
query TI
6259-
SELECT col_group, median(col_i64) FROM group_median_table GROUP BY col_group
6290+
SELECT col_group, median(col_i64) FROM group_median_table_non_nullable GROUP BY col_group
62606291
----
62616292
group0 -4611686018427387854
62626293
group1 100
62636294

6264-
# group median u8
6295+
# group median u8 non-nullable
62656296
query TI rowsort
6266-
SELECT col_group, median(col_u8) FROM group_median_table GROUP BY col_group
6297+
SELECT col_group, median(col_u8) FROM group_median_table_non_nullable GROUP BY col_group
62676298
----
62686299
group0 50
62696300
group1 100
62706301

6271-
# group median u16
6302+
# group median u16 non-nullable
62726303
query TI
6273-
SELECT col_group, median(col_u16) FROM group_median_table GROUP BY col_group
6304+
SELECT col_group, median(col_u16) FROM group_median_table_non_nullable GROUP BY col_group
62746305
----
62756306
group0 50
62766307
group1 100
62776308

6278-
# group median u32
6309+
# group median u32 non-nullable
62796310
query TI
6280-
SELECT col_group, median(col_u32) FROM group_median_table GROUP BY col_group
6311+
SELECT col_group, median(col_u32) FROM group_median_table_non_nullable GROUP BY col_group
62816312
----
62826313
group0 50
62836314
group1 100
62846315

6285-
# group median u64
6316+
# group median u64 non-nullable
62866317
query TI
6287-
SELECT col_group, median(col_u64) FROM group_median_table GROUP BY col_group
6318+
SELECT col_group, median(col_u64) FROM group_median_table_non_nullable GROUP BY col_group
62886319
----
62896320
group0 50
62906321
group1 100
62916322

6292-
# group median f32
6323+
# group median f32 non-nullable
62936324
query TR
6294-
SELECT col_group, median(col_f32) FROM group_median_table GROUP BY col_group
6325+
SELECT col_group, median(col_f32) FROM group_median_table_non_nullable GROUP BY col_group
62956326
----
62966327
group0 2.75
62976328
group1 3.2
62986329

6299-
# group median f64
6330+
# group median f64 non-nullable
63006331
query TR
6301-
SELECT col_group, median(col_f64) FROM group_median_table GROUP BY col_group
6332+
SELECT col_group, median(col_f64) FROM group_median_table_non_nullable GROUP BY col_group
63026333
----
63036334
group0 2.75
63046335
group1 3.3
63056336

6306-
# group median f64_nan
6337+
# group median f64_nan non-nullable
6338+
query TR
6339+
SELECT col_group, median(col_f64_nan) FROM group_median_table_non_nullable GROUP BY col_group
6340+
----
6341+
group0 NaN
6342+
group1 NaN
6343+
6344+
# group median decimal128 non-nullable
6345+
query TR
6346+
SELECT col_group, median(col_decimal128) FROM group_median_table_non_nullable GROUP BY col_group
6347+
----
6348+
group0 0.0002
6349+
group1 0.0003
6350+
6351+
# group median decimal256 non-nullable
63076352
query TR
6308-
SELECT col_group, median(col_f64_nan) FROM group_median_table GROUP BY col_group
6353+
SELECT col_group, median(col_decimal256) FROM group_median_table_non_nullable GROUP BY col_group
6354+
----
6355+
group0 0.0002
6356+
group1 0.0003
6357+
6358+
# group median i8 nullable
6359+
query TI rowsort
6360+
SELECT col_group, median(col_i8) FROM group_median_table_nullable GROUP BY col_group
6361+
----
6362+
group0 -14
6363+
group1 100
6364+
6365+
# group median i16 nullable
6366+
query TI rowsort
6367+
SELECT col_group, median(col_i16) FROM group_median_table_nullable GROUP BY col_group
6368+
----
6369+
group0 -16334
6370+
group1 100
6371+
6372+
# group median i32 nullable
6373+
query TI rowsort
6374+
SELECT col_group, median(col_i32) FROM group_median_table_nullable GROUP BY col_group
6375+
----
6376+
group0 -1073741774
6377+
group1 100
6378+
6379+
# group median i64 nullable
6380+
query TI rowsort
6381+
SELECT col_group, median(col_i64) FROM group_median_table_nullable GROUP BY col_group
6382+
----
6383+
group0 -4611686018427387854
6384+
group1 100
6385+
6386+
# group median u8 nullable
6387+
query TI rowsort
6388+
SELECT col_group, median(col_u8) FROM group_median_table_nullable GROUP BY col_group
6389+
----
6390+
group0 50
6391+
group1 100
6392+
6393+
# group median u16 nullable
6394+
query TI rowsort
6395+
SELECT col_group, median(col_u16) FROM group_median_table_nullable GROUP BY col_group
6396+
----
6397+
group0 50
6398+
group1 100
6399+
6400+
# group median u32 nullable
6401+
query TI rowsort
6402+
SELECT col_group, median(col_u32) FROM group_median_table_nullable GROUP BY col_group
6403+
----
6404+
group0 50
6405+
group1 100
6406+
6407+
# group median u64 nullable
6408+
query TI rowsort
6409+
SELECT col_group, median(col_u64) FROM group_median_table_nullable GROUP BY col_group
6410+
----
6411+
group0 50
6412+
group1 100
6413+
6414+
# group median f32 nullable
6415+
query TR rowsort
6416+
SELECT col_group, median(col_f32) FROM group_median_table_nullable GROUP BY col_group
6417+
----
6418+
group0 2.75
6419+
group1 3.2
6420+
6421+
# group median f64 nullable
6422+
query TR rowsort
6423+
SELECT col_group, median(col_f64) FROM group_median_table_nullable GROUP BY col_group
6424+
----
6425+
group0 2.75
6426+
group1 3.3
6427+
6428+
# group median f64_nan nullable
6429+
query TR rowsort
6430+
SELECT col_group, median(col_f64_nan) FROM group_median_table_nullable GROUP BY col_group
63096431
----
63106432
group0 NaN
63116433
group1 NaN
6434+
6435+
# group median decimal128 nullable
6436+
query TR rowsort
6437+
SELECT col_group, median(col_decimal128) FROM group_median_table_nullable GROUP BY col_group
6438+
----
6439+
group0 0.0002
6440+
group1 0.0003
6441+
6442+
# group median decimal256 nullable
6443+
query TR rowsort
6444+
SELECT col_group, median(col_decimal256) FROM group_median_table_nullable GROUP BY col_group
6445+
----
6446+
group0 0.0002
6447+
group1 0.0003
6448+
6449+
# median with all nulls
6450+
statement ok
6451+
create table group_median_all_nulls(
6452+
a STRING NOT NULL,
6453+
b INT
6454+
) AS VALUES
6455+
( 'group0', NULL),
6456+
( 'group0', NULL),
6457+
( 'group0', NULL),
6458+
( 'group1', NULL),
6459+
( 'group1', NULL),
6460+
( 'group1', NULL)
6461+
6462+
query TIT rowsort
6463+
SELECT a, median(b), arrow_typeof(median(b)) FROM group_median_all_nulls GROUP BY a
6464+
----
6465+
group0 NULL Int32
6466+
group1 NULL Int32

0 commit comments

Comments
 (0)