@@ -133,6 +133,51 @@ GROUP BY 1, 2 ORDER BY 1 LIMIT 5;
133
133
-2117946883 d -2117946883 NULL NULL NULL
134
134
-2098805236 c -2098805236 NULL NULL NULL
135
135
136
+ query ITIIII
137
+ SELECT c5, c1,
138
+ MEDIAN(c5),
139
+ MEDIAN(CASE WHEN c1 = 'a' THEN c5 ELSE NULL END),
140
+ MEDIAN(c5) FILTER (WHERE c1 = 'b'),
141
+ MEDIAN(CASE WHEN c1 = 'a' THEN c5 ELSE NULL END) FILTER (WHERE c1 = 'b')
142
+ FROM aggregate_test_100
143
+ GROUP BY 1, 2 ORDER BY 1 LIMIT 5;
144
+ ----
145
+ -2141999138 c -2141999138 NULL NULL NULL
146
+ -2141451704 a -2141451704 -2141451704 NULL NULL
147
+ -2138770630 b -2138770630 NULL -2138770630 NULL
148
+ -2117946883 d -2117946883 NULL NULL NULL
149
+ -2098805236 c -2098805236 NULL NULL NULL
150
+
151
+ query ITIIII
152
+ SELECT c5, c1,
153
+ APPROX_MEDIAN(c5),
154
+ APPROX_MEDIAN(CASE WHEN c1 = 'a' THEN c5 ELSE NULL END),
155
+ APPROX_MEDIAN(c5) FILTER (WHERE c1 = 'b'),
156
+ APPROX_MEDIAN(CASE WHEN c1 = 'a' THEN c5 ELSE NULL END) FILTER (WHERE c1 = 'b')
157
+ FROM aggregate_test_100
158
+ GROUP BY 1, 2 ORDER BY 1 LIMIT 5;
159
+ ----
160
+ -2141999138 c -2141999138 NULL NULL NULL
161
+ -2141451704 a -2141451704 -2141451704 NULL NULL
162
+ -2138770630 b -2138770630 NULL -2138770630 NULL
163
+ -2117946883 d -2117946883 NULL NULL NULL
164
+ -2098805236 c -2098805236 NULL NULL NULL
165
+
166
+ query ITIIII
167
+ SELECT c5, c1,
168
+ APPROX_DISTINCT(c5),
169
+ APPROX_DISTINCT(CASE WHEN c1 = 'a' THEN c5 ELSE NULL END),
170
+ APPROX_DISTINCT(c5) FILTER (WHERE c1 = 'b'),
171
+ APPROX_DISTINCT(CASE WHEN c1 = 'a' THEN c5 ELSE NULL END) FILTER (WHERE c1 = 'b')
172
+ FROM aggregate_test_100
173
+ GROUP BY 1, 2 ORDER BY 1 LIMIT 5;
174
+ ----
175
+ -2141999138 c 1 0 0 0
176
+ -2141451704 a 1 1 0 0
177
+ -2138770630 b 1 0 1 0
178
+ -2117946883 d 1 0 0 0
179
+ -2098805236 c 1 0 0 0
180
+
136
181
# FIXME: add bool_and(v3) column when issue fixed
137
182
# ISSUE https://github.com/apache/datafusion/issues/11846
138
183
query TBBB rowsort
@@ -222,6 +267,36 @@ SELECT c2, sum(c5), sum(c11) FROM aggregate_test_100 GROUP BY c2 ORDER BY c2;
222
267
4 16155718643 9.531112968922
223
268
5 6449337880 7.074412226677
224
269
270
+ # Test median for int / float
271
+ query IIR
272
+ SELECT c2, median(c5), median(c11) FROM aggregate_test_100 GROUP BY c2 ORDER BY c2;
273
+ ----
274
+ 1 23971150 0.5922606
275
+ 2 -562486880 0.43422085
276
+ 3 240273900 0.40199697
277
+ 4 762932956 0.48515016
278
+ 5 604973998 0.49842384
279
+
280
+ # Test approx_median for int / float
281
+ query IIR
282
+ SELECT c2, approx_median(c5), approx_median(c11) FROM aggregate_test_100 GROUP BY c2 ORDER BY c2;
283
+ ----
284
+ 1 191655437 0.59926736
285
+ 2 -587831330 0.43230486
286
+ 3 240273900 0.40199697
287
+ 4 762932956 0.48515016
288
+ 5 593204320 0.5156586
289
+
290
+ # Test approx_distinct for varchar / int
291
+ query III
292
+ SELECT c2, approx_distinct(c1), approx_distinct(c5) FROM aggregate_test_100 GROUP BY c2 ORDER BY c2;
293
+ ----
294
+ 1 5 22
295
+ 2 5 22
296
+ 3 5 19
297
+ 4 5 23
298
+ 5 5 14
299
+
225
300
# Test count with nullable fields
226
301
query III
227
302
SELECT c2, count(c3), count(c11) FROM aggregate_test_100_null GROUP BY c2 ORDER BY c2;
@@ -252,6 +327,36 @@ SELECT c2, sum(c3), sum(c11) FROM aggregate_test_100 GROUP BY c2 ORDER BY c2;
252
327
4 29 9.531112968922
253
328
5 -194 7.074412226677
254
329
330
+ # Test median with nullable fields
331
+ query IIR
332
+ SELECT c2, median(c3), median(c11) FROM aggregate_test_100_null GROUP BY c2 ORDER BY c2;
333
+ ----
334
+ 1 12 0.6067944
335
+ 2 1 0.46076488
336
+ 3 14 0.40154034
337
+ 4 -17 0.48515016
338
+ 5 -35 0.5536642
339
+
340
+ # Test approx_median with nullable fields
341
+ query IIR
342
+ SELECT c2, approx_median(c3), approx_median(c11) FROM aggregate_test_100_null GROUP BY c2 ORDER BY c2;
343
+ ----
344
+ 1 12 0.6067944
345
+ 2 1 0.46076488
346
+ 3 14 0.40154034
347
+ 4 -7 0.48515016
348
+ 5 -39 0.5536642
349
+
350
+ # Test approx_distinct with nullable fields
351
+ query II
352
+ SELECT c2, approx_distinct(c3) FROM aggregate_test_100_null GROUP BY c2 ORDER BY c2;
353
+ ----
354
+ 1 19
355
+ 2 16
356
+ 3 13
357
+ 4 16
358
+ 5 12
359
+
255
360
# Test avg for tinyint / float
256
361
query TRR
257
362
SELECT
@@ -338,6 +443,48 @@ FROM aggregate_test_100 GROUP BY c2 ORDER BY c2;
338
443
4 417
339
444
5 284
340
445
446
+ # Test approx_distinct with filter
447
+ query III
448
+ SELECT
449
+ c2,
450
+ approx_distinct(c3) FILTER (WHERE c3 > 0),
451
+ approx_distinct(c3) FILTER (WHERE c11 > 10)
452
+ FROM aggregate_test_100 GROUP BY c2 ORDER BY c2;
453
+ ----
454
+ 1 13 0
455
+ 2 12 0
456
+ 3 11 0
457
+ 4 13 0
458
+ 5 5 0
459
+
460
+ # Test median with filter
461
+ query III
462
+ SELECT
463
+ c2,
464
+ median(c3) FILTER (WHERE c3 > 0),
465
+ median(c3) FILTER (WHERE c3 < 0)
466
+ FROM aggregate_test_100 GROUP BY c2 ORDER BY c2;
467
+ ----
468
+ 1 57 -56
469
+ 2 52 -60
470
+ 3 71 -74
471
+ 4 65 -69
472
+ 5 64 -59
473
+
474
+ # Test approx_median with filter
475
+ query III
476
+ SELECT
477
+ c2,
478
+ approx_median(c3) FILTER (WHERE c3 > 0),
479
+ approx_median(c3) FILTER (WHERE c3 < 0)
480
+ FROM aggregate_test_100 GROUP BY c2 ORDER BY c2;
481
+ ----
482
+ 1 57 -56
483
+ 2 52 -60
484
+ 3 71 -76
485
+ 4 65 -64
486
+ 5 64 -59
487
+
341
488
# Test count with nullable fields and filter
342
489
query III
343
490
SELECT c2,
@@ -421,6 +568,79 @@ FROM aggregate_test_100_null GROUP BY c2 ORDER BY c2;
421
568
4 -171 56 2.10740506649 1.939846396446
422
569
5 -86 -76 1.8741710186 1.600569307804
423
570
571
+ # Test approx_distinct with nullable fields and filter
572
+ query II
573
+ SELECT c2,
574
+ approx_distinct(c3) FILTER (WHERE c5 > 0)
575
+ FROM aggregate_test_100_null GROUP BY c2 ORDER BY c2;
576
+ ----
577
+ 1 11
578
+ 2 6
579
+ 3 6
580
+ 4 11
581
+ 5 8
582
+
583
+ # Test approx_distinct with nullable fields and nullable filter
584
+ query II
585
+ SELECT c2,
586
+ approx_distinct(c3) FILTER (WHERE c11 > 0.5)
587
+ FROM aggregate_test_100_null GROUP BY c2 ORDER BY c2;
588
+ ----
589
+ 1 10
590
+ 2 6
591
+ 3 3
592
+ 4 3
593
+ 5 6
594
+
595
+ # Test median with nullable fields and filter
596
+ query IIR
597
+ SELECT c2,
598
+ median(c3) FILTER (WHERE c5 > 0),
599
+ median(c11) FILTER (WHERE c5 < 0)
600
+ FROM aggregate_test_100_null GROUP BY c2 ORDER BY c2;
601
+ ----
602
+ 1 -5 0.6623719
603
+ 2 15 0.52930677
604
+ 3 13 0.32792538
605
+ 4 -38 0.49774808
606
+ 5 -18 0.49842384
607
+
608
+ # Test min / max with nullable fields and nullable filter
609
+ query II
610
+ SELECT c2,
611
+ median(c3) FILTER (WHERE c11 > 0.5)
612
+ FROM aggregate_test_100_null GROUP BY c2 ORDER BY c2;
613
+ ----
614
+ 1 33
615
+ 2 -29
616
+ 3 22
617
+ 4 -90
618
+ 5 -22
619
+
620
+ # Test approx_median with nullable fields and filter
621
+ query IIR
622
+ SELECT c2,
623
+ approx_median(c3) FILTER (WHERE c5 > 0),
624
+ approx_median(c11) FILTER (WHERE c5 < 0)
625
+ FROM aggregate_test_100_null GROUP BY c2 ORDER BY c2;
626
+ ----
627
+ 1 -5 0.6623719
628
+ 2 12 0.52930677
629
+ 3 13 0.32792538
630
+ 4 -38 0.49774808
631
+ 5 -21 0.47652745
632
+
633
+ # Test approx_median with nullable fields and nullable filter
634
+ query II
635
+ SELECT c2,
636
+ approx_median(c3) FILTER (WHERE c11 > 0.5)
637
+ FROM aggregate_test_100_null GROUP BY c2 ORDER BY c2;
638
+ ----
639
+ 1 35
640
+ 2 -29
641
+ 3 22
642
+ 4 -90
643
+ 5 -32
424
644
425
645
statement ok
426
646
DROP TABLE aggregate_test_100_null;
0 commit comments