mirror of
https://github.com/GreptimeTeam/greptimedb.git
synced 2026-05-15 12:30:38 +00:00
* test: migrate aggregation tests from duckdb, part4 Signed-off-by: Dennis Zhuang <killme2008@gmail.com> * fix: tests Signed-off-by: Dennis Zhuang <killme2008@gmail.com> * fix: rename tests Signed-off-by: Dennis Zhuang <killme2008@gmail.com> * fix: comments Signed-off-by: Dennis Zhuang <killme2008@gmail.com> * chore: ignore zero weights test Signed-off-by: Dennis Zhuang <killme2008@gmail.com> * chore: remove duplicated sql Signed-off-by: Dennis Zhuang <killme2008@gmail.com> --------- Signed-off-by: Dennis Zhuang <killme2008@gmail.com>
77 lines
2.4 KiB
SQL
77 lines
2.4 KiB
SQL
-- Migrated from DuckDB test: test/sql/aggregate/aggregates/test_approx_quantile.test
|
|
-- Test approx_percentile_cont function instead of approx_quantile
|
|
|
|
-- Test basic approximate quantile
|
|
CREATE TABLE approx_test(i INTEGER, ts TIMESTAMP TIME INDEX);
|
|
|
|
INSERT INTO approx_test SELECT number, number * 1000 FROM numbers LIMIT 1000;
|
|
|
|
-- Test approx_percentile_cont
|
|
-- median
|
|
SELECT approx_percentile_cont(0.5) WITHIN GROUP (ORDER BY i) FROM approx_test;
|
|
|
|
-- first quartile
|
|
SELECT approx_percentile_cont(0.25) WITHIN GROUP (ORDER BY i) FROM approx_test;
|
|
|
|
-- third quartile
|
|
SELECT approx_percentile_cont(0.75) WITHIN GROUP (ORDER BY i) FROM approx_test;
|
|
|
|
-- 95th percentile
|
|
SELECT approx_percentile_cont(0.95) WITHIN GROUP (ORDER BY i) FROM approx_test;
|
|
|
|
-- Test approx_percentile_cont DESC
|
|
-- median
|
|
SELECT approx_percentile_cont(0.5) WITHIN GROUP (ORDER BY i DESC) FROM approx_test;
|
|
|
|
-- first quartile
|
|
SELECT approx_percentile_cont(0.25) WITHIN GROUP (ORDER BY i DESC) FROM approx_test;
|
|
|
|
-- third quartile
|
|
SELECT approx_percentile_cont(0.75) WITHIN GROUP (ORDER BY i DESC) FROM approx_test;
|
|
|
|
-- 95th percentile
|
|
SELECT approx_percentile_cont(0.95) WITHIN GROUP (ORDER BY i DESC) FROM approx_test;
|
|
|
|
-- Test with different data types
|
|
CREATE TABLE approx_double(d DOUBLE, ts TIMESTAMP TIME INDEX);
|
|
|
|
INSERT INTO approx_double SELECT number * 1.5, number * 1000 FROM numbers LIMIT 1000;
|
|
|
|
SELECT approx_percentile_cont(0.5) WITHIN GROUP (ORDER BY d) FROM approx_double;
|
|
|
|
SELECT approx_percentile_cont(0.9) WITHIN GROUP (ORDER BY d) FROM approx_double;
|
|
|
|
-- Test with groups
|
|
CREATE TABLE approx_groups(grp INTEGER, val INTEGER, ts TIMESTAMP TIME INDEX);
|
|
|
|
INSERT INTO approx_groups SELECT
|
|
number % 3 as grp,
|
|
number,
|
|
number * 1000
|
|
FROM numbers LIMIT 300;
|
|
|
|
SELECT grp, approx_percentile_cont(0.5) WITHIN GROUP (ORDER BY val)
|
|
FROM approx_groups GROUP BY grp ORDER BY grp;
|
|
|
|
-- Test with NULL values
|
|
INSERT INTO approx_test VALUES (NULL, 1001000);
|
|
|
|
SELECT approx_percentile_cont(0.5) WITHIN GROUP (ORDER BY i) FROM approx_test;
|
|
|
|
-- Test edge cases
|
|
-- should be close to min
|
|
SELECT approx_percentile_cont(0.0) WITHIN GROUP (ORDER BY i) FROM approx_test;
|
|
|
|
SELECT approx_percentile_cont(1.0) WITHIN GROUP (ORDER BY i DESC) FROM approx_test;
|
|
|
|
-- should be close to max
|
|
SELECT approx_percentile_cont(1.0) WITHIN GROUP (ORDER BY i) FROM approx_test;
|
|
|
|
SELECT approx_percentile_cont(0.0) WITHIN GROUP (ORDER BY i DESC) FROM approx_test;
|
|
|
|
DROP TABLE approx_test;
|
|
|
|
DROP TABLE approx_double;
|
|
|
|
DROP TABLE approx_groups;
|