From 82bbdc97009dcf3bcac6537404c3b2cd519ab6d0 Mon Sep 17 00:00:00 2001 From: Peter Toth Date: Mon, 21 Aug 2023 14:12:35 +0200 Subject: [PATCH] add legacy test case --- .../analyzer-results/percentiles.sql.out | 56 +++++++++++++++---- .../sql-tests/inputs/percentiles.sql | 18 ++++++ .../sql-tests/results/percentiles.sql.out | 36 ++++++++++++ 3 files changed, 98 insertions(+), 12 deletions(-) diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/percentiles.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/percentiles.sql.out index 236d01e8ff388..36845ce63466e 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/percentiles.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/percentiles.sql.out @@ -103,7 +103,7 @@ SELECT percentile_disc(0.25) WITHIN GROUP (ORDER BY v DESC) FILTER (WHERE k > 0) FROM aggr -- !query analysis -Aggregate [percentile_disc(v#x, cast(0.25 as double), false, 0, 0) AS percentile_disc(0.25) WITHIN GROUP (ORDER BY v)#x, percentile_disc(v#x, cast(0.25 as double), false, 0, 0) FILTER (WHERE (k#x > 0)) AS percentile_disc(0.25) WITHIN GROUP (ORDER BY v) FILTER (WHERE (k > 0))#x, percentile_disc(v#x, cast(0.25 as double), true, 0, 0) AS percentile_disc(0.25) WITHIN GROUP (ORDER BY v DESC)#x, percentile_disc(v#x, cast(0.25 as double), true, 0, 0) FILTER (WHERE (k#x > 0)) AS percentile_disc(0.25) WITHIN GROUP (ORDER BY v DESC) FILTER (WHERE (k > 0))#x] +Aggregate [percentile_disc(v#x, cast(0.25 as double), false, 0, 0, false) AS percentile_disc(0.25) WITHIN GROUP (ORDER BY v)#x, percentile_disc(v#x, cast(0.25 as double), false, 0, 0, false) FILTER (WHERE (k#x > 0)) AS percentile_disc(0.25) WITHIN GROUP (ORDER BY v) FILTER (WHERE (k > 0))#x, percentile_disc(v#x, cast(0.25 as double), true, 0, 0, false) AS percentile_disc(0.25) WITHIN GROUP (ORDER BY v DESC)#x, percentile_disc(v#x, cast(0.25 as double), true, 0, 0, false) FILTER (WHERE (k#x > 0)) AS percentile_disc(0.25) WITHIN GROUP (ORDER BY v DESC) FILTER (WHERE (k > 0))#x] +- SubqueryAlias aggr +- View (`aggr`, [k#x,v#x]) +- Project [cast(k#x as int) AS k#x, cast(v#x as int) AS v#x] @@ -124,7 +124,7 @@ GROUP BY k ORDER BY k -- !query analysis Sort [k#x ASC NULLS FIRST], true -+- Aggregate [k#x], [k#x, percentile_disc(v#x, cast(0.25 as double), false, 0, 0) AS percentile_disc(0.25) WITHIN GROUP (ORDER BY v)#x, percentile_disc(v#x, cast(0.25 as double), false, 0, 0) FILTER (WHERE (k#x > 0)) AS percentile_disc(0.25) WITHIN GROUP (ORDER BY v) FILTER (WHERE (k > 0))#x, percentile_disc(v#x, cast(0.25 as double), true, 0, 0) AS percentile_disc(0.25) WITHIN GROUP (ORDER BY v DESC)#x, percentile_disc(v#x, cast(0.25 as double), true, 0, 0) FILTER (WHERE (k#x > 0)) AS percentile_disc(0.25) WITHIN GROUP (ORDER BY v DESC) FILTER (WHERE (k > 0))#x] ++- Aggregate [k#x], [k#x, percentile_disc(v#x, cast(0.25 as double), false, 0, 0, false) AS percentile_disc(0.25) WITHIN GROUP (ORDER BY v)#x, percentile_disc(v#x, cast(0.25 as double), false, 0, 0, false) FILTER (WHERE (k#x > 0)) AS percentile_disc(0.25) WITHIN GROUP (ORDER BY v) FILTER (WHERE (k > 0))#x, percentile_disc(v#x, cast(0.25 as double), true, 0, 0, false) AS percentile_disc(0.25) WITHIN GROUP (ORDER BY v DESC)#x, percentile_disc(v#x, cast(0.25 as double), true, 0, 0, false) FILTER (WHERE (k#x > 0)) AS percentile_disc(0.25) WITHIN GROUP (ORDER BY v DESC) FILTER (WHERE (k > 0))#x] +- SubqueryAlias aggr +- View (`aggr`, [k#x,v#x]) +- Project [cast(k#x as int) AS k#x, cast(v#x as int) AS v#x] @@ -184,7 +184,7 @@ ORDER BY salary Sort [salary#x ASC NULLS FIRST], true +- Project [employee_name#x, department#x, salary#x, percentile_cont(0.25) WITHIN GROUP (ORDER BY salary) OVER (PARTITION BY department ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)#x, percentile_disc(0.25) WITHIN GROUP (ORDER BY salary) OVER (PARTITION BY department ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)#x, percentile_cont(0.25) WITHIN GROUP (ORDER BY salary DESC) OVER (PARTITION BY department ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)#x, percentile_disc(0.25) WITHIN GROUP (ORDER BY salary DESC) OVER (PARTITION BY department ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)#x] +- Project [employee_name#x, department#x, salary#x, percentile_cont(0.25) WITHIN GROUP (ORDER BY salary) OVER (PARTITION BY department ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)#x, percentile_disc(0.25) WITHIN GROUP (ORDER BY salary) OVER (PARTITION BY department ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)#x, percentile_cont(0.25) WITHIN GROUP (ORDER BY salary DESC) OVER (PARTITION BY department ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)#x, percentile_disc(0.25) WITHIN GROUP (ORDER BY salary DESC) OVER (PARTITION BY department ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)#x, percentile_cont(0.25) WITHIN GROUP (ORDER BY salary) OVER (PARTITION BY department ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)#x, percentile_disc(0.25) WITHIN GROUP (ORDER BY salary) OVER (PARTITION BY department ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)#x, percentile_cont(0.25) WITHIN GROUP (ORDER BY salary DESC) OVER (PARTITION BY department ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)#x, percentile_disc(0.25) WITHIN GROUP (ORDER BY salary DESC) OVER (PARTITION BY department ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)#x] - +- Window [percentile_cont(salary#x, cast(0.25 as double), false) windowspecdefinition(department#x, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS percentile_cont(0.25) WITHIN GROUP (ORDER BY salary) OVER (PARTITION BY department ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)#x, percentile_disc(salary#x, cast(0.25 as double), false, 0, 0) windowspecdefinition(department#x, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS percentile_disc(0.25) WITHIN GROUP (ORDER BY salary) OVER (PARTITION BY department ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)#x, percentile_cont(salary#x, cast(0.25 as double), true) windowspecdefinition(department#x, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS percentile_cont(0.25) WITHIN GROUP (ORDER BY salary DESC) OVER (PARTITION BY department ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)#x, percentile_disc(salary#x, cast(0.25 as double), true, 0, 0) windowspecdefinition(department#x, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS percentile_disc(0.25) WITHIN GROUP (ORDER BY salary DESC) OVER (PARTITION BY department ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)#x], [department#x] + +- Window [percentile_cont(salary#x, cast(0.25 as double), false) windowspecdefinition(department#x, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS percentile_cont(0.25) WITHIN GROUP (ORDER BY salary) OVER (PARTITION BY department ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)#x, percentile_disc(salary#x, cast(0.25 as double), false, 0, 0, false) windowspecdefinition(department#x, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS percentile_disc(0.25) WITHIN GROUP (ORDER BY salary) OVER (PARTITION BY department ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)#x, percentile_cont(salary#x, cast(0.25 as double), true) windowspecdefinition(department#x, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS percentile_cont(0.25) WITHIN GROUP (ORDER BY salary DESC) OVER (PARTITION BY department ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)#x, percentile_disc(salary#x, cast(0.25 as double), true, 0, 0, false) windowspecdefinition(department#x, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS percentile_disc(0.25) WITHIN GROUP (ORDER BY salary DESC) OVER (PARTITION BY department ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)#x], [department#x] +- Project [employee_name#x, department#x, salary#x] +- SubqueryAlias basic_pays +- View (`basic_pays`, [employee_name#x,department#x,salary#x]) @@ -364,7 +364,7 @@ ORDER BY salary Sort [salary#x ASC NULLS FIRST], true +- Project [employee_name#x, department#x, salary#x, percentile_cont(0.25) WITHIN GROUP (ORDER BY salary) OVER (PARTITION BY department ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)#x, percentile_disc(0.25) WITHIN GROUP (ORDER BY salary) OVER (PARTITION BY department ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)#x, percentile_cont(0.25) WITHIN GROUP (ORDER BY salary DESC) OVER (PARTITION BY department ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)#x, percentile_disc(0.25) WITHIN GROUP (ORDER BY salary DESC) OVER (PARTITION BY department ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)#x] +- Project [employee_name#x, department#x, salary#x, percentile_cont(0.25) WITHIN GROUP (ORDER BY salary) OVER (PARTITION BY department ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)#x, percentile_disc(0.25) WITHIN GROUP (ORDER BY salary) OVER (PARTITION BY department ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)#x, percentile_cont(0.25) WITHIN GROUP (ORDER BY salary DESC) OVER (PARTITION BY department ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)#x, percentile_disc(0.25) WITHIN GROUP (ORDER BY salary DESC) OVER (PARTITION BY department ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)#x, percentile_cont(0.25) WITHIN GROUP (ORDER BY salary) OVER (PARTITION BY department ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)#x, percentile_disc(0.25) WITHIN GROUP (ORDER BY salary) OVER (PARTITION BY department ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)#x, percentile_cont(0.25) WITHIN GROUP (ORDER BY salary DESC) OVER (PARTITION BY department ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)#x, percentile_disc(0.25) WITHIN GROUP (ORDER BY salary DESC) OVER (PARTITION BY department ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)#x] - +- Window [percentile_cont(salary#x, cast(0.25 as double), false) windowspecdefinition(department#x, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS percentile_cont(0.25) WITHIN GROUP (ORDER BY salary) OVER (PARTITION BY department ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)#x, percentile_disc(salary#x, cast(0.25 as double), false, 0, 0) windowspecdefinition(department#x, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS percentile_disc(0.25) WITHIN GROUP (ORDER BY salary) OVER (PARTITION BY department ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)#x, percentile_cont(salary#x, cast(0.25 as double), true) windowspecdefinition(department#x, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS percentile_cont(0.25) WITHIN GROUP (ORDER BY salary DESC) OVER (PARTITION BY department ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)#x, percentile_disc(salary#x, cast(0.25 as double), true, 0, 0) windowspecdefinition(department#x, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS percentile_disc(0.25) WITHIN GROUP (ORDER BY salary DESC) OVER (PARTITION BY department ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)#x], [department#x] + +- Window [percentile_cont(salary#x, cast(0.25 as double), false) windowspecdefinition(department#x, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS percentile_cont(0.25) WITHIN GROUP (ORDER BY salary) OVER (PARTITION BY department ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)#x, percentile_disc(salary#x, cast(0.25 as double), false, 0, 0, false) windowspecdefinition(department#x, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS percentile_disc(0.25) WITHIN GROUP (ORDER BY salary) OVER (PARTITION BY department ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)#x, percentile_cont(salary#x, cast(0.25 as double), true) windowspecdefinition(department#x, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS percentile_cont(0.25) WITHIN GROUP (ORDER BY salary DESC) OVER (PARTITION BY department ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)#x, percentile_disc(salary#x, cast(0.25 as double), true, 0, 0, false) windowspecdefinition(department#x, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS percentile_disc(0.25) WITHIN GROUP (ORDER BY salary DESC) OVER (PARTITION BY department ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)#x], [department#x] +- Project [employee_name#x, department#x, salary#x] +- SubqueryAlias basic_pays +- View (`basic_pays`, [employee_name#x,department#x,salary#x]) @@ -392,7 +392,7 @@ ORDER BY salary Sort [salary#x ASC NULLS FIRST], true +- Project [employee_name#x, department#x, salary#x, median(salary) OVER (PARTITION BY department ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)#x, percentile_cont(0.5) WITHIN GROUP (ORDER BY salary) OVER (PARTITION BY department ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)#x, percentile_disc(0.5) WITHIN GROUP (ORDER BY salary) OVER (PARTITION BY department ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)#x, percentile_cont(0.5) WITHIN GROUP (ORDER BY salary DESC) OVER (PARTITION BY department ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)#x, percentile_disc(0.5) WITHIN GROUP (ORDER BY salary DESC) OVER (PARTITION BY department ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)#x] +- Project [employee_name#x, department#x, salary#x, median(salary) OVER (PARTITION BY department ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)#x, percentile_cont(0.5) WITHIN GROUP (ORDER BY salary) OVER (PARTITION BY department ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)#x, percentile_disc(0.5) WITHIN GROUP (ORDER BY salary) OVER (PARTITION BY department ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)#x, percentile_cont(0.5) WITHIN GROUP (ORDER BY salary DESC) OVER (PARTITION BY department ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)#x, percentile_disc(0.5) WITHIN GROUP (ORDER BY salary DESC) OVER (PARTITION BY department ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)#x, median(salary) OVER (PARTITION BY department ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)#x, percentile_cont(0.5) WITHIN GROUP (ORDER BY salary) OVER (PARTITION BY department ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)#x, percentile_disc(0.5) WITHIN GROUP (ORDER BY salary) OVER (PARTITION BY department ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)#x, percentile_cont(0.5) WITHIN GROUP (ORDER BY salary DESC) OVER (PARTITION BY department ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)#x, percentile_disc(0.5) WITHIN GROUP (ORDER BY salary DESC) OVER (PARTITION BY department ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)#x] - +- Window [median(salary#x) windowspecdefinition(department#x, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS median(salary) OVER (PARTITION BY department ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)#x, percentile_cont(salary#x, cast(0.5 as double), false) windowspecdefinition(department#x, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS percentile_cont(0.5) WITHIN GROUP (ORDER BY salary) OVER (PARTITION BY department ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)#x, percentile_disc(salary#x, cast(0.5 as double), false, 0, 0) windowspecdefinition(department#x, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS percentile_disc(0.5) WITHIN GROUP (ORDER BY salary) OVER (PARTITION BY department ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)#x, percentile_cont(salary#x, cast(0.5 as double), true) windowspecdefinition(department#x, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS percentile_cont(0.5) WITHIN GROUP (ORDER BY salary DESC) OVER (PARTITION BY department ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)#x, percentile_disc(salary#x, cast(0.5 as double), true, 0, 0) windowspecdefinition(department#x, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS percentile_disc(0.5) WITHIN GROUP (ORDER BY salary DESC) OVER (PARTITION BY department ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)#x], [department#x] + +- Window [median(salary#x) windowspecdefinition(department#x, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS median(salary) OVER (PARTITION BY department ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)#x, percentile_cont(salary#x, cast(0.5 as double), false) windowspecdefinition(department#x, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS percentile_cont(0.5) WITHIN GROUP (ORDER BY salary) OVER (PARTITION BY department ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)#x, percentile_disc(salary#x, cast(0.5 as double), false, 0, 0, false) windowspecdefinition(department#x, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS percentile_disc(0.5) WITHIN GROUP (ORDER BY salary) OVER (PARTITION BY department ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)#x, percentile_cont(salary#x, cast(0.5 as double), true) windowspecdefinition(department#x, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS percentile_cont(0.5) WITHIN GROUP (ORDER BY salary DESC) OVER (PARTITION BY department ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)#x, percentile_disc(salary#x, cast(0.5 as double), true, 0, 0, false) windowspecdefinition(department#x, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS percentile_disc(0.5) WITHIN GROUP (ORDER BY salary DESC) OVER (PARTITION BY department ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)#x], [department#x] +- Project [employee_name#x, department#x, salary#x] +- Filter (salary#x > 8900) +- SubqueryAlias basic_pays @@ -659,7 +659,7 @@ SELECT percentile_disc(0.25) WITHIN GROUP (ORDER BY dt DESC) FROM intervals -- !query analysis -Aggregate [percentile_disc(dt#x, cast(0.25 as double), false, 0, 0) AS percentile_disc(0.25) WITHIN GROUP (ORDER BY dt)#x, percentile_disc(dt#x, cast(0.25 as double), true, 0, 0) AS percentile_disc(0.25) WITHIN GROUP (ORDER BY dt DESC)#x] +Aggregate [percentile_disc(dt#x, cast(0.25 as double), false, 0, 0, false) AS percentile_disc(0.25) WITHIN GROUP (ORDER BY dt)#x, percentile_disc(dt#x, cast(0.25 as double), true, 0, 0, false) AS percentile_disc(0.25) WITHIN GROUP (ORDER BY dt DESC)#x] +- SubqueryAlias intervals +- View (`intervals`, [k#x,dt#x,ym#x,dt2#x]) +- Project [cast(k#x as int) AS k#x, cast(dt#x as interval month) AS dt#x, cast(ym#x as interval second) AS ym#x, cast(dt2#x as interval minute) AS dt2#x] @@ -678,7 +678,7 @@ GROUP BY k ORDER BY k -- !query analysis Sort [k#x ASC NULLS FIRST], true -+- Aggregate [k#x], [k#x, percentile_disc(ym#x, cast(0.25 as double), false, 0, 0) AS percentile_disc(0.25) WITHIN GROUP (ORDER BY ym)#x, percentile_disc(ym#x, cast(0.25 as double), true, 0, 0) AS percentile_disc(0.25) WITHIN GROUP (ORDER BY ym DESC)#x] ++- Aggregate [k#x], [k#x, percentile_disc(ym#x, cast(0.25 as double), false, 0, 0, false) AS percentile_disc(0.25) WITHIN GROUP (ORDER BY ym)#x, percentile_disc(ym#x, cast(0.25 as double), true, 0, 0, false) AS percentile_disc(0.25) WITHIN GROUP (ORDER BY ym DESC)#x] +- SubqueryAlias intervals +- View (`intervals`, [k#x,dt#x,ym#x,dt2#x]) +- Project [cast(k#x as int) AS k#x, cast(dt#x as interval month) AS dt#x, cast(ym#x as interval second) AS ym#x, cast(dt2#x as interval minute) AS dt2#x] @@ -697,7 +697,7 @@ GROUP BY k ORDER BY k -- !query analysis Sort [k#x ASC NULLS FIRST], true -+- Aggregate [k#x], [k#x, percentile_disc(dt2#x, cast(0.25 as double), false, 0, 0) AS percentile_disc(0.25) WITHIN GROUP (ORDER BY dt2)#x, percentile_disc(dt2#x, cast(0.25 as double), true, 0, 0) AS percentile_disc(0.25) WITHIN GROUP (ORDER BY dt2 DESC)#x] ++- Aggregate [k#x], [k#x, percentile_disc(dt2#x, cast(0.25 as double), false, 0, 0, false) AS percentile_disc(0.25) WITHIN GROUP (ORDER BY dt2)#x, percentile_disc(dt2#x, cast(0.25 as double), true, 0, 0, false) AS percentile_disc(0.25) WITHIN GROUP (ORDER BY dt2 DESC)#x] +- SubqueryAlias intervals +- View (`intervals`, [k#x,dt#x,ym#x,dt2#x]) +- Project [cast(k#x as int) AS k#x, cast(dt#x as interval month) AS dt#x, cast(ym#x as interval second) AS ym#x, cast(dt2#x as interval minute) AS dt2#x] @@ -777,7 +777,7 @@ SELECT percentile_disc(1.0) WITHIN GROUP (ORDER BY a) as p10 FROM VALUES (0) AS v(a) -- !query analysis -Aggregate [percentile_disc(a#x, cast(0.0 as double), false, 0, 0) AS p0#x, percentile_disc(a#x, cast(0.1 as double), false, 0, 0) AS p1#x, percentile_disc(a#x, cast(0.2 as double), false, 0, 0) AS p2#x, percentile_disc(a#x, cast(0.3 as double), false, 0, 0) AS p3#x, percentile_disc(a#x, cast(0.4 as double), false, 0, 0) AS p4#x, percentile_disc(a#x, cast(0.5 as double), false, 0, 0) AS p5#x, percentile_disc(a#x, cast(0.6 as double), false, 0, 0) AS p6#x, percentile_disc(a#x, cast(0.7 as double), false, 0, 0) AS p7#x, percentile_disc(a#x, cast(0.8 as double), false, 0, 0) AS p8#x, percentile_disc(a#x, cast(0.9 as double), false, 0, 0) AS p9#x, percentile_disc(a#x, cast(1.0 as double), false, 0, 0) AS p10#x] +Aggregate [percentile_disc(a#x, cast(0.0 as double), false, 0, 0, false) AS p0#x, percentile_disc(a#x, cast(0.1 as double), false, 0, 0, false) AS p1#x, percentile_disc(a#x, cast(0.2 as double), false, 0, 0, false) AS p2#x, percentile_disc(a#x, cast(0.3 as double), false, 0, 0, false) AS p3#x, percentile_disc(a#x, cast(0.4 as double), false, 0, 0, false) AS p4#x, percentile_disc(a#x, cast(0.5 as double), false, 0, 0, false) AS p5#x, percentile_disc(a#x, cast(0.6 as double), false, 0, 0, false) AS p6#x, percentile_disc(a#x, cast(0.7 as double), false, 0, 0, false) AS p7#x, percentile_disc(a#x, cast(0.8 as double), false, 0, 0, false) AS p8#x, percentile_disc(a#x, cast(0.9 as double), false, 0, 0, false) AS p9#x, percentile_disc(a#x, cast(1.0 as double), false, 0, 0, false) AS p10#x] +- SubqueryAlias v +- LocalRelation [a#x] @@ -797,7 +797,7 @@ SELECT percentile_disc(1.0) WITHIN GROUP (ORDER BY a) as p10 FROM VALUES (0), (1) AS v(a) -- !query analysis -Aggregate [percentile_disc(a#x, cast(0.0 as double), false, 0, 0) AS p0#x, percentile_disc(a#x, cast(0.1 as double), false, 0, 0) AS p1#x, percentile_disc(a#x, cast(0.2 as double), false, 0, 0) AS p2#x, percentile_disc(a#x, cast(0.3 as double), false, 0, 0) AS p3#x, percentile_disc(a#x, cast(0.4 as double), false, 0, 0) AS p4#x, percentile_disc(a#x, cast(0.5 as double), false, 0, 0) AS p5#x, percentile_disc(a#x, cast(0.6 as double), false, 0, 0) AS p6#x, percentile_disc(a#x, cast(0.7 as double), false, 0, 0) AS p7#x, percentile_disc(a#x, cast(0.8 as double), false, 0, 0) AS p8#x, percentile_disc(a#x, cast(0.9 as double), false, 0, 0) AS p9#x, percentile_disc(a#x, cast(1.0 as double), false, 0, 0) AS p10#x] +Aggregate [percentile_disc(a#x, cast(0.0 as double), false, 0, 0, false) AS p0#x, percentile_disc(a#x, cast(0.1 as double), false, 0, 0, false) AS p1#x, percentile_disc(a#x, cast(0.2 as double), false, 0, 0, false) AS p2#x, percentile_disc(a#x, cast(0.3 as double), false, 0, 0, false) AS p3#x, percentile_disc(a#x, cast(0.4 as double), false, 0, 0, false) AS p4#x, percentile_disc(a#x, cast(0.5 as double), false, 0, 0, false) AS p5#x, percentile_disc(a#x, cast(0.6 as double), false, 0, 0, false) AS p6#x, percentile_disc(a#x, cast(0.7 as double), false, 0, 0, false) AS p7#x, percentile_disc(a#x, cast(0.8 as double), false, 0, 0, false) AS p8#x, percentile_disc(a#x, cast(0.9 as double), false, 0, 0, false) AS p9#x, percentile_disc(a#x, cast(1.0 as double), false, 0, 0, false) AS p10#x] +- SubqueryAlias v +- LocalRelation [a#x] @@ -817,7 +817,7 @@ SELECT percentile_disc(1.0) WITHIN GROUP (ORDER BY a) as p10 FROM VALUES (0), (1), (2) AS v(a) -- !query analysis -Aggregate [percentile_disc(a#x, cast(0.0 as double), false, 0, 0) AS p0#x, percentile_disc(a#x, cast(0.1 as double), false, 0, 0) AS p1#x, percentile_disc(a#x, cast(0.2 as double), false, 0, 0) AS p2#x, percentile_disc(a#x, cast(0.3 as double), false, 0, 0) AS p3#x, percentile_disc(a#x, cast(0.4 as double), false, 0, 0) AS p4#x, percentile_disc(a#x, cast(0.5 as double), false, 0, 0) AS p5#x, percentile_disc(a#x, cast(0.6 as double), false, 0, 0) AS p6#x, percentile_disc(a#x, cast(0.7 as double), false, 0, 0) AS p7#x, percentile_disc(a#x, cast(0.8 as double), false, 0, 0) AS p8#x, percentile_disc(a#x, cast(0.9 as double), false, 0, 0) AS p9#x, percentile_disc(a#x, cast(1.0 as double), false, 0, 0) AS p10#x] +Aggregate [percentile_disc(a#x, cast(0.0 as double), false, 0, 0, false) AS p0#x, percentile_disc(a#x, cast(0.1 as double), false, 0, 0, false) AS p1#x, percentile_disc(a#x, cast(0.2 as double), false, 0, 0, false) AS p2#x, percentile_disc(a#x, cast(0.3 as double), false, 0, 0, false) AS p3#x, percentile_disc(a#x, cast(0.4 as double), false, 0, 0, false) AS p4#x, percentile_disc(a#x, cast(0.5 as double), false, 0, 0, false) AS p5#x, percentile_disc(a#x, cast(0.6 as double), false, 0, 0, false) AS p6#x, percentile_disc(a#x, cast(0.7 as double), false, 0, 0, false) AS p7#x, percentile_disc(a#x, cast(0.8 as double), false, 0, 0, false) AS p8#x, percentile_disc(a#x, cast(0.9 as double), false, 0, 0, false) AS p9#x, percentile_disc(a#x, cast(1.0 as double), false, 0, 0, false) AS p10#x] +- SubqueryAlias v +- LocalRelation [a#x] @@ -837,6 +837,38 @@ SELECT percentile_disc(1.0) WITHIN GROUP (ORDER BY a) as p10 FROM VALUES (0), (1), (2), (3), (4) AS v(a) -- !query analysis -Aggregate [percentile_disc(a#x, cast(0.0 as double), false, 0, 0) AS p0#x, percentile_disc(a#x, cast(0.1 as double), false, 0, 0) AS p1#x, percentile_disc(a#x, cast(0.2 as double), false, 0, 0) AS p2#x, percentile_disc(a#x, cast(0.3 as double), false, 0, 0) AS p3#x, percentile_disc(a#x, cast(0.4 as double), false, 0, 0) AS p4#x, percentile_disc(a#x, cast(0.5 as double), false, 0, 0) AS p5#x, percentile_disc(a#x, cast(0.6 as double), false, 0, 0) AS p6#x, percentile_disc(a#x, cast(0.7 as double), false, 0, 0) AS p7#x, percentile_disc(a#x, cast(0.8 as double), false, 0, 0) AS p8#x, percentile_disc(a#x, cast(0.9 as double), false, 0, 0) AS p9#x, percentile_disc(a#x, cast(1.0 as double), false, 0, 0) AS p10#x] +Aggregate [percentile_disc(a#x, cast(0.0 as double), false, 0, 0, false) AS p0#x, percentile_disc(a#x, cast(0.1 as double), false, 0, 0, false) AS p1#x, percentile_disc(a#x, cast(0.2 as double), false, 0, 0, false) AS p2#x, percentile_disc(a#x, cast(0.3 as double), false, 0, 0, false) AS p3#x, percentile_disc(a#x, cast(0.4 as double), false, 0, 0, false) AS p4#x, percentile_disc(a#x, cast(0.5 as double), false, 0, 0, false) AS p5#x, percentile_disc(a#x, cast(0.6 as double), false, 0, 0, false) AS p6#x, percentile_disc(a#x, cast(0.7 as double), false, 0, 0, false) AS p7#x, percentile_disc(a#x, cast(0.8 as double), false, 0, 0, false) AS p8#x, percentile_disc(a#x, cast(0.9 as double), false, 0, 0, false) AS p9#x, percentile_disc(a#x, cast(1.0 as double), false, 0, 0, false) AS p10#x] +- SubqueryAlias v +- LocalRelation [a#x] + + +-- !query +SET spark.sql.legacy.percentileDiscCalculation = true +-- !query analysis +SetCommand (spark.sql.legacy.percentileDiscCalculation,Some(true)) + + +-- !query +SELECT + percentile_disc(0.0) WITHIN GROUP (ORDER BY a) as p0, + percentile_disc(0.1) WITHIN GROUP (ORDER BY a) as p1, + percentile_disc(0.2) WITHIN GROUP (ORDER BY a) as p2, + percentile_disc(0.3) WITHIN GROUP (ORDER BY a) as p3, + percentile_disc(0.4) WITHIN GROUP (ORDER BY a) as p4, + percentile_disc(0.5) WITHIN GROUP (ORDER BY a) as p5, + percentile_disc(0.6) WITHIN GROUP (ORDER BY a) as p6, + percentile_disc(0.7) WITHIN GROUP (ORDER BY a) as p7, + percentile_disc(0.8) WITHIN GROUP (ORDER BY a) as p8, + percentile_disc(0.9) WITHIN GROUP (ORDER BY a) as p9, + percentile_disc(1.0) WITHIN GROUP (ORDER BY a) as p10 +FROM VALUES (0), (1), (2), (3), (4) AS v(a) +-- !query analysis +Aggregate [percentile_disc(a#x, cast(0.0 as double), false, 0, 0, true) AS p0#x, percentile_disc(a#x, cast(0.1 as double), false, 0, 0, true) AS p1#x, percentile_disc(a#x, cast(0.2 as double), false, 0, 0, true) AS p2#x, percentile_disc(a#x, cast(0.3 as double), false, 0, 0, true) AS p3#x, percentile_disc(a#x, cast(0.4 as double), false, 0, 0, true) AS p4#x, percentile_disc(a#x, cast(0.5 as double), false, 0, 0, true) AS p5#x, percentile_disc(a#x, cast(0.6 as double), false, 0, 0, true) AS p6#x, percentile_disc(a#x, cast(0.7 as double), false, 0, 0, true) AS p7#x, percentile_disc(a#x, cast(0.8 as double), false, 0, 0, true) AS p8#x, percentile_disc(a#x, cast(0.9 as double), false, 0, 0, true) AS p9#x, percentile_disc(a#x, cast(1.0 as double), false, 0, 0, true) AS p10#x] ++- SubqueryAlias v + +- LocalRelation [a#x] + + +-- !query +SET spark.sql.legacy.percentileDiscCalculation = false +-- !query analysis +SetCommand (spark.sql.legacy.percentileDiscCalculation,Some(false)) diff --git a/sql/core/src/test/resources/sql-tests/inputs/percentiles.sql b/sql/core/src/test/resources/sql-tests/inputs/percentiles.sql index 5b99955c541e6..87c5d4be90ce1 100644 --- a/sql/core/src/test/resources/sql-tests/inputs/percentiles.sql +++ b/sql/core/src/test/resources/sql-tests/inputs/percentiles.sql @@ -357,3 +357,21 @@ SELECT percentile_disc(0.9) WITHIN GROUP (ORDER BY a) as p9, percentile_disc(1.0) WITHIN GROUP (ORDER BY a) as p10 FROM VALUES (0), (1), (2), (3), (4) AS v(a); + +SET spark.sql.legacy.percentileDiscCalculation = true; + +SELECT + percentile_disc(0.0) WITHIN GROUP (ORDER BY a) as p0, + percentile_disc(0.1) WITHIN GROUP (ORDER BY a) as p1, + percentile_disc(0.2) WITHIN GROUP (ORDER BY a) as p2, + percentile_disc(0.3) WITHIN GROUP (ORDER BY a) as p3, + percentile_disc(0.4) WITHIN GROUP (ORDER BY a) as p4, + percentile_disc(0.5) WITHIN GROUP (ORDER BY a) as p5, + percentile_disc(0.6) WITHIN GROUP (ORDER BY a) as p6, + percentile_disc(0.7) WITHIN GROUP (ORDER BY a) as p7, + percentile_disc(0.8) WITHIN GROUP (ORDER BY a) as p8, + percentile_disc(0.9) WITHIN GROUP (ORDER BY a) as p9, + percentile_disc(1.0) WITHIN GROUP (ORDER BY a) as p10 +FROM VALUES (0), (1), (2), (3), (4) AS v(a); + +SET spark.sql.legacy.percentileDiscCalculation = false; diff --git a/sql/core/src/test/resources/sql-tests/results/percentiles.sql.out b/sql/core/src/test/resources/sql-tests/results/percentiles.sql.out index 68a69d80ac3d2..0d6ab54286110 100644 --- a/sql/core/src/test/resources/sql-tests/results/percentiles.sql.out +++ b/sql/core/src/test/resources/sql-tests/results/percentiles.sql.out @@ -810,3 +810,39 @@ FROM VALUES (0), (1), (2), (3), (4) AS v(a) struct -- !query output 0.0 0.0 0.0 1.0 1.0 2.0 2.0 3.0 3.0 4.0 4.0 + + +-- !query +SET spark.sql.legacy.percentileDiscCalculation = true +-- !query schema +struct +-- !query output +spark.sql.legacy.percentileDiscCalculation true + + +-- !query +SELECT + percentile_disc(0.0) WITHIN GROUP (ORDER BY a) as p0, + percentile_disc(0.1) WITHIN GROUP (ORDER BY a) as p1, + percentile_disc(0.2) WITHIN GROUP (ORDER BY a) as p2, + percentile_disc(0.3) WITHIN GROUP (ORDER BY a) as p3, + percentile_disc(0.4) WITHIN GROUP (ORDER BY a) as p4, + percentile_disc(0.5) WITHIN GROUP (ORDER BY a) as p5, + percentile_disc(0.6) WITHIN GROUP (ORDER BY a) as p6, + percentile_disc(0.7) WITHIN GROUP (ORDER BY a) as p7, + percentile_disc(0.8) WITHIN GROUP (ORDER BY a) as p8, + percentile_disc(0.9) WITHIN GROUP (ORDER BY a) as p9, + percentile_disc(1.0) WITHIN GROUP (ORDER BY a) as p10 +FROM VALUES (0), (1), (2), (3), (4) AS v(a) +-- !query schema +struct +-- !query output +0.0 0.0 0.0 1.0 1.0 2.0 2.0 2.0 3.0 3.0 4.0 + + +-- !query +SET spark.sql.legacy.percentileDiscCalculation = false +-- !query schema +struct +-- !query output +spark.sql.legacy.percentileDiscCalculation false