Permalink
Show file tree
Hide file tree
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Tests added for percentile and median functions
- Loading branch information
1 parent
b77105c
commit 58a6e43
Showing
3 changed files
with
383 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,305 @@ | ||
| CREATE TABLE t1 (name CHAR(10), test double, score DECIMAL(19,4)); | ||
| INSERT INTO t1 VALUES | ||
| ('Chun', 0, 3), ('Chun', 0, 7), | ||
| ('Kaolin', 0.5, 3), ('Kaolin', 0.6, 7), | ||
| ('Kaolin', 0.5, 4), | ||
| ('Tatiana', 0.8, 4), ('Tata', 0.8, 4); | ||
| select name, percentile_cont(0.5) within group(order by score) over (partition by name) as c from t1; | ||
| name c | ||
| Chun 5.00000 | ||
| Chun 5.00000 | ||
| Kaolin 4.00000 | ||
| Kaolin 4.00000 | ||
| Kaolin 4.00000 | ||
| Tatiana 4.00000 | ||
| Tata 4.00000 | ||
| no partition clause | ||
| select name, percentile_disc(0.5) within group(order by score) over () from t1; | ||
| name percentile_disc(0.5) within group(order by score) over () | ||
| Chun 4.00000 | ||
| Chun 4.00000 | ||
| Kaolin 4.00000 | ||
| Kaolin 4.00000 | ||
| Kaolin 4.00000 | ||
| Tatiana 4.00000 | ||
| Tata 4.00000 | ||
| select name, percentile_cont(0.5) within group(order by score) over () from t1; | ||
| name percentile_cont(0.5) within group(order by score) over () | ||
| Chun 4.00000 | ||
| Chun 4.00000 | ||
| Kaolin 4.00000 | ||
| Kaolin 4.00000 | ||
| Kaolin 4.00000 | ||
| Tatiana 4.00000 | ||
| Tata 4.00000 | ||
| argument set to null | ||
| select name, percentile_cont(null) within group(order by score) over (partition by name) from t1; | ||
| ERROR HY000: Numeric values are only allowed as arguments to percentile functions | ||
| select name, percentile_disc(null) within group(order by score) over (partition by name) from t1; | ||
| ERROR HY000: Numeric values are only allowed as arguments to percentile functions | ||
| subqueries having percentile functions | ||
| select * from ( select name , percentile_cont(0.5) within group ( order by score) over (partition by name ) from t1 ) as t; | ||
| name percentile_cont(0.5) within group ( order by score) over (partition by name ) | ||
| Chun 5.00000 | ||
| Chun 5.00000 | ||
| Kaolin 4.00000 | ||
| Kaolin 4.00000 | ||
| Kaolin 4.00000 | ||
| Tatiana 4.00000 | ||
| Tata 4.00000 | ||
| select * from ( select name , percentile_disc(0.5) within group ( order by score) over (partition by name ) from t1 ) as t; | ||
| name percentile_disc(0.5) within group ( order by score) over (partition by name ) | ||
| Chun 3.00000 | ||
| Chun 3.00000 | ||
| Kaolin 4.00000 | ||
| Kaolin 4.00000 | ||
| Kaolin 4.00000 | ||
| Tatiana 4.00000 | ||
| Tata 4.00000 | ||
| select name from t1 a where (select percentile_disc(0.5) within group (order by score) over (partition by name) from t1 b limit 1) >= 0.5; | ||
| name | ||
| Chun | ||
| Chun | ||
| Kaolin | ||
| Kaolin | ||
| Kaolin | ||
| Tatiana | ||
| Tata | ||
| disallowed fields in order by | ||
| select score, percentile_cont(0.5) within group(order by name) over (partition by score) from t1; | ||
| ERROR HY000: Numeric datatype is required for Percentile_CONT function | ||
| select score, percentile_disc(0.5) within group(order by name) over (partition by score) from t1; | ||
| score percentile_disc(0.5) within group(order by name) over (partition by score) | ||
| 3.0000 Chun | ||
| 7.0000 Chun | ||
| 3.0000 Chun | ||
| 7.0000 Chun | ||
| 4.0000 Tata | ||
| 4.0000 Tata | ||
| 4.0000 Tata | ||
| order by clause has more than one element | ||
| select percentile_disc(0.5) within group(order by score,test) over (partition by name) from t1; | ||
| ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'test) over (partition by name) from t1' at line 1 | ||
| select percentile_cont(0.5) within group(order by score,test) over (partition by name) from t1; | ||
| ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'test) over (partition by name) from t1' at line 1 | ||
| parameter value should be in the range of [0,1] | ||
| select percentile_disc(1.5) within group(order by score) over (partition by name) from t1; | ||
| ERROR HY000: Argument to the percentile functions does not belong to the range [0,1] | ||
| select percentile_cont(1.5) within group(order by score) over (partition by name) from t1; | ||
| ERROR HY000: Argument to the percentile functions does not belong to the range [0,1] | ||
| select name,percentile_cont(test) within group(order by score) over (partition by name) from t1; | ||
| ERROR HY000: Argument to the percentile functions is not a constant | ||
| select name, percentile_disc(test) within group(order by score) over (partition by name) from t1; | ||
| ERROR HY000: Argument to the percentile functions is not a constant | ||
| only numerical types are allowed as argument to percentile functions | ||
| select name, percentile_cont(name) within group(order by score) over (partition by name) from t1; | ||
| ERROR HY000: Numeric values are only allowed as arguments to percentile functions | ||
| complete query with partition column | ||
| select name,cume_dist() over (partition by name order by score), percentile_disc(0.5) within group(order by score) over (partition by name) as c from t1; | ||
| name cume_dist() over (partition by name order by score) c | ||
| Chun 0.5000000000 3.00000 | ||
| Chun 1.0000000000 3.00000 | ||
| Kaolin 0.3333333333 4.00000 | ||
| Kaolin 1.0000000000 4.00000 | ||
| Kaolin 0.6666666667 4.00000 | ||
| Tatiana 1.0000000000 4.00000 | ||
| Tata 1.0000000000 4.00000 | ||
| select name, percentile_cont(0.5) within group(order by score) over (partition by name) as c from t1; | ||
| name c | ||
| Chun 5.00000 | ||
| Chun 5.00000 | ||
| Kaolin 4.00000 | ||
| Kaolin 4.00000 | ||
| Kaolin 4.00000 | ||
| Tatiana 4.00000 | ||
| Tata 4.00000 | ||
| select name,cume_dist() over (partition by name order by score) as b, percentile_disc(0.1) within group(order by score) over (partition by name) as c from t1; | ||
| name b c | ||
| Chun 0.5000000000 3.00000 | ||
| Chun 1.0000000000 3.00000 | ||
| Kaolin 0.3333333333 3.00000 | ||
| Kaolin 1.0000000000 3.00000 | ||
| Kaolin 0.6666666667 3.00000 | ||
| Tatiana 1.0000000000 4.00000 | ||
| Tata 1.0000000000 4.00000 | ||
| select name,cume_dist() over (partition by name order by score) as b, percentile_disc(0.2) within group(order by score) over (partition by name) as c from t1; | ||
| name b c | ||
| Chun 0.5000000000 3.00000 | ||
| Chun 1.0000000000 3.00000 | ||
| Kaolin 0.3333333333 3.00000 | ||
| Kaolin 1.0000000000 3.00000 | ||
| Kaolin 0.6666666667 3.00000 | ||
| Tatiana 1.0000000000 4.00000 | ||
| Tata 1.0000000000 4.00000 | ||
| select name,cume_dist() over (partition by name order by score) as b, percentile_disc(0.3) within group(order by score) over (partition by name) as c from t1; | ||
| name b c | ||
| Chun 0.5000000000 3.00000 | ||
| Chun 1.0000000000 3.00000 | ||
| Kaolin 0.3333333333 3.00000 | ||
| Kaolin 1.0000000000 3.00000 | ||
| Kaolin 0.6666666667 3.00000 | ||
| Tatiana 1.0000000000 4.00000 | ||
| Tata 1.0000000000 4.00000 | ||
| select name,cume_dist() over (partition by name order by score) as b, percentile_disc(0.4) within group(order by score) over (partition by name) as c from t1; | ||
| name b c | ||
| Chun 0.5000000000 3.00000 | ||
| Chun 1.0000000000 3.00000 | ||
| Kaolin 0.3333333333 4.00000 | ||
| Kaolin 1.0000000000 4.00000 | ||
| Kaolin 0.6666666667 4.00000 | ||
| Tatiana 1.0000000000 4.00000 | ||
| Tata 1.0000000000 4.00000 | ||
| select name,cume_dist() over (partition by name order by score) as b, percentile_disc(0.5) within group(order by score) over (partition by name) as c from t1; | ||
| name b c | ||
| Chun 0.5000000000 3.00000 | ||
| Chun 1.0000000000 3.00000 | ||
| Kaolin 0.3333333333 4.00000 | ||
| Kaolin 1.0000000000 4.00000 | ||
| Kaolin 0.6666666667 4.00000 | ||
| Tatiana 1.0000000000 4.00000 | ||
| Tata 1.0000000000 4.00000 | ||
| select name,cume_dist() over (partition by name order by score) as b, percentile_disc(0.6) within group(order by score) over (partition by name) as c from t1; | ||
| name b c | ||
| Chun 0.5000000000 7.00000 | ||
| Chun 1.0000000000 7.00000 | ||
| Kaolin 0.3333333333 4.00000 | ||
| Kaolin 1.0000000000 4.00000 | ||
| Kaolin 0.6666666667 4.00000 | ||
| Tatiana 1.0000000000 4.00000 | ||
| Tata 1.0000000000 4.00000 | ||
| select name,cume_dist() over (partition by name order by score) as b, percentile_disc(0.7) within group(order by score) over (partition by name) as c from t1; | ||
| name b c | ||
| Chun 0.5000000000 7.00000 | ||
| Chun 1.0000000000 7.00000 | ||
| Kaolin 0.3333333333 7.00000 | ||
| Kaolin 1.0000000000 7.00000 | ||
| Kaolin 0.6666666667 7.00000 | ||
| Tatiana 1.0000000000 4.00000 | ||
| Tata 1.0000000000 4.00000 | ||
| select name,cume_dist() over (partition by name order by score) as b, percentile_disc(0.8) within group(order by score) over (partition by name) as c from t1; | ||
| name b c | ||
| Chun 0.5000000000 7.00000 | ||
| Chun 1.0000000000 7.00000 | ||
| Kaolin 0.3333333333 7.00000 | ||
| Kaolin 1.0000000000 7.00000 | ||
| Kaolin 0.6666666667 7.00000 | ||
| Tatiana 1.0000000000 4.00000 | ||
| Tata 1.0000000000 4.00000 | ||
| select name,cume_dist() over (partition by name order by score) as b, percentile_disc(0.9) within group(order by score) over (partition by name) as c from t1; | ||
| name b c | ||
| Chun 0.5000000000 7.00000 | ||
| Chun 1.0000000000 7.00000 | ||
| Kaolin 0.3333333333 7.00000 | ||
| Kaolin 1.0000000000 7.00000 | ||
| Kaolin 0.6666666667 7.00000 | ||
| Tatiana 1.0000000000 4.00000 | ||
| Tata 1.0000000000 4.00000 | ||
| select name,cume_dist() over (partition by name order by score) as b, percentile_disc(1) within group(order by score) over (partition by name) as c from t1; | ||
| name b c | ||
| Chun 0.5000000000 7.00000 | ||
| Chun 1.0000000000 7.00000 | ||
| Kaolin 0.3333333333 7.00000 | ||
| Kaolin 1.0000000000 7.00000 | ||
| Kaolin 0.6666666667 7.00000 | ||
| Tatiana 1.0000000000 4.00000 | ||
| Tata 1.0000000000 4.00000 | ||
| select median(score) over (partition by name), percentile_cont(0) within group(order by score) over (partition by name) as c from t1; | ||
| median(score) over (partition by name) c | ||
| 5.00000 3.00000 | ||
| 5.00000 3.00000 | ||
| 4.00000 3.00000 | ||
| 4.00000 3.00000 | ||
| 4.00000 3.00000 | ||
| 4.00000 4.00000 | ||
| 4.00000 4.00000 | ||
| select median(score) over (partition by name), percentile_cont(0.1) within group(order by score) over (partition by name) as c from t1; | ||
| median(score) over (partition by name) c | ||
| 5.00000 3.40000 | ||
| 5.00000 3.40000 | ||
| 4.00000 3.20000 | ||
| 4.00000 3.20000 | ||
| 4.00000 3.20000 | ||
| 4.00000 4.00000 | ||
| 4.00000 4.00000 | ||
| select median(score) over (partition by name), percentile_cont(0.2) within group(order by score) over (partition by name) as c from t1; | ||
| median(score) over (partition by name) c | ||
| 5.00000 3.80000 | ||
| 5.00000 3.80000 | ||
| 4.00000 3.40000 | ||
| 4.00000 3.40000 | ||
| 4.00000 3.40000 | ||
| 4.00000 4.00000 | ||
| 4.00000 4.00000 | ||
| select median(score) over (partition by name), percentile_cont(0.3) within group(order by score) over (partition by name) as c from t1; | ||
| median(score) over (partition by name) c | ||
| 5.00000 4.20000 | ||
| 5.00000 4.20000 | ||
| 4.00000 3.60000 | ||
| 4.00000 3.60000 | ||
| 4.00000 3.60000 | ||
| 4.00000 4.00000 | ||
| 4.00000 4.00000 | ||
| select median(score) over (partition by name), percentile_cont(0.4) within group(order by score) over (partition by name) as c from t1; | ||
| median(score) over (partition by name) c | ||
| 5.00000 4.60000 | ||
| 5.00000 4.60000 | ||
| 4.00000 3.80000 | ||
| 4.00000 3.80000 | ||
| 4.00000 3.80000 | ||
| 4.00000 4.00000 | ||
| 4.00000 4.00000 | ||
| select median(score) over (partition by name), percentile_cont(0.5) within group(order by score) over (partition by name) as c from t1; | ||
| median(score) over (partition by name) c | ||
| 5.00000 5.00000 | ||
| 5.00000 5.00000 | ||
| 4.00000 4.00000 | ||
| 4.00000 4.00000 | ||
| 4.00000 4.00000 | ||
| 4.00000 4.00000 | ||
| 4.00000 4.00000 | ||
| select median(score) over (partition by name), percentile_cont(0.6) within group(order by score) over (partition by name) as c from t1; | ||
| median(score) over (partition by name) c | ||
| 5.00000 5.40000 | ||
| 5.00000 5.40000 | ||
| 4.00000 4.60000 | ||
| 4.00000 4.60000 | ||
| 4.00000 4.60000 | ||
| 4.00000 4.00000 | ||
| 4.00000 4.00000 | ||
| select median(score) over (partition by name), percentile_cont(0.7) within group(order by score) over (partition by name) as c from t1; | ||
| median(score) over (partition by name) c | ||
| 5.00000 5.80000 | ||
| 5.00000 5.80000 | ||
| 4.00000 5.20000 | ||
| 4.00000 5.20000 | ||
| 4.00000 5.20000 | ||
| 4.00000 4.00000 | ||
| 4.00000 4.00000 | ||
| select median(score) over (partition by name), percentile_cont(0.8) within group(order by score) over (partition by name) as c from t1; | ||
| median(score) over (partition by name) c | ||
| 5.00000 6.20000 | ||
| 5.00000 6.20000 | ||
| 4.00000 5.80000 | ||
| 4.00000 5.80000 | ||
| 4.00000 5.80000 | ||
| 4.00000 4.00000 | ||
| 4.00000 4.00000 | ||
| select median(score) over (partition by name), percentile_cont(0.9) within group(order by score) over (partition by name) as c from t1; | ||
| median(score) over (partition by name) c | ||
| 5.00000 6.60000 | ||
| 5.00000 6.60000 | ||
| 4.00000 6.40000 | ||
| 4.00000 6.40000 | ||
| 4.00000 6.40000 | ||
| 4.00000 4.00000 | ||
| 4.00000 4.00000 | ||
| select median(score) over (partition by name), percentile_cont(1) within group(order by score) over (partition by name) as c from t1; | ||
| median(score) over (partition by name) c | ||
| 5.00000 7.00000 | ||
| 5.00000 7.00000 | ||
| 4.00000 7.00000 | ||
| 4.00000 7.00000 | ||
| 4.00000 7.00000 | ||
| 4.00000 4.00000 | ||
| 4.00000 4.00000 | ||
| drop table t1; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,77 @@ | ||
| CREATE TABLE t1 (name CHAR(10), test double, score DECIMAL(19,4)); | ||
| INSERT INTO t1 VALUES | ||
| ('Chun', 0, 3), ('Chun', 0, 7), | ||
| ('Kaolin', 0.5, 3), ('Kaolin', 0.6, 7), | ||
| ('Kaolin', 0.5, 4), | ||
| ('Tatiana', 0.8, 4), ('Tata', 0.8, 4); | ||
|
|
||
| select name, percentile_cont(0.5) within group(order by score) over (partition by name) as c from t1; | ||
|
|
||
| --echo no partition clause | ||
| select name, percentile_disc(0.5) within group(order by score) over () from t1; | ||
| select name, percentile_cont(0.5) within group(order by score) over () from t1; | ||
|
|
||
| --echo argument set to null | ||
| --error ER_WRONG_TYPE_OF_ARGUMENT | ||
| select name, percentile_cont(null) within group(order by score) over (partition by name) from t1; | ||
| --error ER_WRONG_TYPE_OF_ARGUMENT | ||
| select name, percentile_disc(null) within group(order by score) over (partition by name) from t1; | ||
|
|
||
| --echo subqueries having percentile functions | ||
| select * from ( select name , percentile_cont(0.5) within group ( order by score) over (partition by name ) from t1 ) as t; | ||
| select * from ( select name , percentile_disc(0.5) within group ( order by score) over (partition by name ) from t1 ) as t; | ||
| select name from t1 a where (select percentile_disc(0.5) within group (order by score) over (partition by name) from t1 b limit 1) >= 0.5; | ||
|
|
||
| --echo disallowed fields in order by | ||
| --error ER_WRONG_TYPE_FOR_PERCENTILE_CONT | ||
| select score, percentile_cont(0.5) within group(order by name) over (partition by score) from t1; | ||
| select score, percentile_disc(0.5) within group(order by name) over (partition by score) from t1; | ||
|
|
||
| --echo order by clause has more than one element | ||
| --error ER_PARSE_ERROR | ||
| select percentile_disc(0.5) within group(order by score,test) over (partition by name) from t1; | ||
| --error ER_PARSE_ERROR | ||
| select percentile_cont(0.5) within group(order by score,test) over (partition by name) from t1; | ||
|
|
||
| --echo parameter value should be in the range of [0,1] | ||
| --error ER_ARGUMENT_OUT_OF_RANGE | ||
| select percentile_disc(1.5) within group(order by score) over (partition by name) from t1; | ||
| --error ER_ARGUMENT_OUT_OF_RANGE | ||
| select percentile_cont(1.5) within group(order by score) over (partition by name) from t1; | ||
|
|
||
| --error ER_ARGUMENT_NOT_CONSTANT | ||
| select name,percentile_cont(test) within group(order by score) over (partition by name) from t1; | ||
| --error ER_ARGUMENT_NOT_CONSTANT | ||
| select name, percentile_disc(test) within group(order by score) over (partition by name) from t1; | ||
|
|
||
| --echo only numerical types are allowed as argument to percentile functions | ||
| --error ER_WRONG_TYPE_OF_ARGUMENT | ||
| select name, percentile_cont(name) within group(order by score) over (partition by name) from t1; | ||
|
|
||
| --echo complete query with partition column | ||
| select name,cume_dist() over (partition by name order by score), percentile_disc(0.5) within group(order by score) over (partition by name) as c from t1; | ||
| select name, percentile_cont(0.5) within group(order by score) over (partition by name) as c from t1; | ||
|
|
||
| select name,cume_dist() over (partition by name order by score) as b, percentile_disc(0.1) within group(order by score) over (partition by name) as c from t1; | ||
| select name,cume_dist() over (partition by name order by score) as b, percentile_disc(0.2) within group(order by score) over (partition by name) as c from t1; | ||
| select name,cume_dist() over (partition by name order by score) as b, percentile_disc(0.3) within group(order by score) over (partition by name) as c from t1; | ||
| select name,cume_dist() over (partition by name order by score) as b, percentile_disc(0.4) within group(order by score) over (partition by name) as c from t1; | ||
| select name,cume_dist() over (partition by name order by score) as b, percentile_disc(0.5) within group(order by score) over (partition by name) as c from t1; | ||
| select name,cume_dist() over (partition by name order by score) as b, percentile_disc(0.6) within group(order by score) over (partition by name) as c from t1; | ||
| select name,cume_dist() over (partition by name order by score) as b, percentile_disc(0.7) within group(order by score) over (partition by name) as c from t1; | ||
| select name,cume_dist() over (partition by name order by score) as b, percentile_disc(0.8) within group(order by score) over (partition by name) as c from t1; | ||
| select name,cume_dist() over (partition by name order by score) as b, percentile_disc(0.9) within group(order by score) over (partition by name) as c from t1; | ||
| select name,cume_dist() over (partition by name order by score) as b, percentile_disc(1) within group(order by score) over (partition by name) as c from t1; | ||
|
|
||
| select median(score) over (partition by name), percentile_cont(0) within group(order by score) over (partition by name) as c from t1; | ||
| select median(score) over (partition by name), percentile_cont(0.1) within group(order by score) over (partition by name) as c from t1; | ||
| select median(score) over (partition by name), percentile_cont(0.2) within group(order by score) over (partition by name) as c from t1; | ||
| select median(score) over (partition by name), percentile_cont(0.3) within group(order by score) over (partition by name) as c from t1; | ||
| select median(score) over (partition by name), percentile_cont(0.4) within group(order by score) over (partition by name) as c from t1; | ||
| select median(score) over (partition by name), percentile_cont(0.5) within group(order by score) over (partition by name) as c from t1; | ||
| select median(score) over (partition by name), percentile_cont(0.6) within group(order by score) over (partition by name) as c from t1; | ||
| select median(score) over (partition by name), percentile_cont(0.7) within group(order by score) over (partition by name) as c from t1; | ||
| select median(score) over (partition by name), percentile_cont(0.8) within group(order by score) over (partition by name) as c from t1; | ||
| select median(score) over (partition by name), percentile_cont(0.9) within group(order by score) over (partition by name) as c from t1; | ||
| select median(score) over (partition by name), percentile_cont(1) within group(order by score) over (partition by name) as c from t1; | ||
| drop table t1; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters