diff options
| author | Peter Eisentraut | 2023-02-22 08:32:12 +0000 |
|---|---|---|
| committer | Peter Eisentraut | 2023-02-22 08:33:07 +0000 |
| commit | 2ddab010c2777c6a965cea82dc1b809ddc33ecc1 (patch) | |
| tree | a880541c896359d98ce2aac07f6a0d54e7ecb4d2 /src/test/regress | |
| parent | 7e5ddf7e4d1ee36233371661c5e96007c8d7c665 (diff) | |
Implement ANY_VALUE aggregate
SQL:2023 defines an ANY_VALUE aggregate whose purpose is to emit an
implementation-dependent (i.e. non-deterministic) value from the
aggregated rows.
Author: Vik Fearing <vik@postgresfriends.org>
Reviewed-by: Peter Eisentraut <peter.eisentraut@enterprisedb.com>
Reviewed-by: David Rowley <dgrowleyml@gmail.com>
Discussion: https://www.postgresql.org/message-id/flat/5cff866c-10a8-d2df-32cb-e9072e6b04a2@postgresfriends.org
Diffstat (limited to 'src/test/regress')
| -rw-r--r-- | src/test/regress/expected/aggregates.out | 30 | ||||
| -rw-r--r-- | src/test/regress/sql/aggregates.sql | 7 |
2 files changed, 37 insertions, 0 deletions
diff --git a/src/test/regress/expected/aggregates.out b/src/test/regress/expected/aggregates.out index 52046c33dc8..e074cb71bf6 100644 --- a/src/test/regress/expected/aggregates.out +++ b/src/test/regress/expected/aggregates.out @@ -25,6 +25,30 @@ SELECT avg(a) AS avg_32 FROM aggtest WHERE a < 100; 32.6666666666666667 (1 row) +SELECT any_value(v) FROM (VALUES (1), (2), (3)) AS v (v); + any_value +----------- + 1 +(1 row) + +SELECT any_value(v) FROM (VALUES (NULL)) AS v (v); + any_value +----------- + +(1 row) + +SELECT any_value(v) FROM (VALUES (NULL), (1), (2)) AS v (v); + any_value +----------- + 1 +(1 row) + +SELECT any_value(v) FROM (VALUES (array['hello', 'world'])) AS v (v); + any_value +--------------- + {hello,world} +(1 row) + -- In 7.1, avg(float4) is computed using float8 arithmetic. -- Round the result to 3 digits to avoid platform-specific results. SELECT avg(b)::numeric(10,3) AS avg_107_943 FROM aggtest; @@ -2033,6 +2057,12 @@ from (values ('a', 'b')) AS v(foo,bar); a (1 row) +select any_value(v) filter (where v > 2) from (values (1), (2), (3)) as v (v); + any_value +----------- + 3 +(1 row) + -- outer reference in FILTER (PostgreSQL extension) select (select count(*) from (values (1)) t0(inner_c)) diff --git a/src/test/regress/sql/aggregates.sql b/src/test/regress/sql/aggregates.sql index e7970983c36..616ef38c259 100644 --- a/src/test/regress/sql/aggregates.sql +++ b/src/test/regress/sql/aggregates.sql @@ -24,6 +24,11 @@ SELECT avg(four) AS avg_1 FROM onek; SELECT avg(a) AS avg_32 FROM aggtest WHERE a < 100; +SELECT any_value(v) FROM (VALUES (1), (2), (3)) AS v (v); +SELECT any_value(v) FROM (VALUES (NULL)) AS v (v); +SELECT any_value(v) FROM (VALUES (NULL), (1), (2)) AS v (v); +SELECT any_value(v) FROM (VALUES (array['hello', 'world'])) AS v (v); + -- In 7.1, avg(float4) is computed using float8 arithmetic. -- Round the result to 3 digits to avoid platform-specific results. @@ -810,6 +815,8 @@ having exists (select 1 from onek b where sum(distinct a.four) = b.four); select max(foo COLLATE "C") filter (where (bar collate "POSIX") > '0') from (values ('a', 'b')) AS v(foo,bar); +select any_value(v) filter (where v > 2) from (values (1), (2), (3)) as v (v); + -- outer reference in FILTER (PostgreSQL extension) select (select count(*) from (values (1)) t0(inner_c)) |
