mirror of
https://github.com/postgres/postgres.git
synced 2025-12-12 02:37:31 +03:00
Implement max() and min() aggregates for array types. Patch from Koju
Iijima, reviewed by Neil Conway. Catalog version number bumped, regression tests updated.
This commit is contained in:
@@ -483,3 +483,47 @@ select '{
|
||||
(1 row)
|
||||
|
||||
-- all of the above should be accepted
|
||||
-- tests for array aggregates
|
||||
CREATE TEMP TABLE arraggtest ( f1 INT[], f2 TEXT[][], f3 FLOAT[]);
|
||||
INSERT INTO arraggtest (f1, f2, f3) VALUES
|
||||
('{1,2,3,4}','{{grey,red},{blue,blue}}','{1.6, 0.0}');
|
||||
INSERT INTO arraggtest (f1, f2, f3) VALUES
|
||||
('{1,2,3}','{{grey,red},{grey,blue}}','{1.6}');
|
||||
SELECT max(f1), min(f1), max(f2), min(f2), max(f3), min(f3) FROM arraggtest;
|
||||
max | min | max | min | max | min
|
||||
-----------+---------+--------------------------+--------------------------+---------+-------
|
||||
{1,2,3,4} | {1,2,3} | {{grey,red},{grey,blue}} | {{grey,red},{blue,blue}} | {1.6,0} | {1.6}
|
||||
(1 row)
|
||||
|
||||
INSERT INTO arraggtest (f1, f2, f3) VALUES
|
||||
('{3,3,2,4,5,6}','{{white,yellow},{pink,orange}}','{2.1,3.3,1.8,1.7,1.6}');
|
||||
SELECT max(f1), min(f1), max(f2), min(f2), max(f3), min(f3) FROM arraggtest;
|
||||
max | min | max | min | max | min
|
||||
---------------+---------+--------------------------------+--------------------------+-----------------------+-------
|
||||
{3,3,2,4,5,6} | {1,2,3} | {{white,yellow},{pink,orange}} | {{grey,red},{blue,blue}} | {2.1,3.3,1.8,1.7,1.6} | {1.6}
|
||||
(1 row)
|
||||
|
||||
INSERT INTO arraggtest (f1, f2, f3) VALUES
|
||||
('{2}','{{black,red},{green,orange}}','{1.6,2.2,2.6,0.4}');
|
||||
SELECT max(f1), min(f1), max(f2), min(f2), max(f3), min(f3) FROM arraggtest;
|
||||
max | min | max | min | max | min
|
||||
---------------+---------+--------------------------------+------------------------------+-----------------------+-------
|
||||
{3,3,2,4,5,6} | {1,2,3} | {{white,yellow},{pink,orange}} | {{black,red},{green,orange}} | {2.1,3.3,1.8,1.7,1.6} | {1.6}
|
||||
(1 row)
|
||||
|
||||
INSERT INTO arraggtest (f1, f2, f3) VALUES
|
||||
('{4,2,6,7,8,1}','{{red},{black},{purple},{blue},{blue}}',NULL);
|
||||
SELECT max(f1), min(f1), max(f2), min(f2), max(f3), min(f3) FROM arraggtest;
|
||||
max | min | max | min | max | min
|
||||
---------------+---------+--------------------------------+------------------------------+-----------------------+-------
|
||||
{4,2,6,7,8,1} | {1,2,3} | {{white,yellow},{pink,orange}} | {{black,red},{green,orange}} | {2.1,3.3,1.8,1.7,1.6} | {1.6}
|
||||
(1 row)
|
||||
|
||||
INSERT INTO arraggtest (f1, f2, f3) VALUES
|
||||
('{}','{{pink,white,blue,red,grey,orange}}','{2.1,1.87,1.4,2.2}');
|
||||
SELECT max(f1), min(f1), max(f2), min(f2), max(f3), min(f3) FROM arraggtest;
|
||||
max | min | max | min | max | min
|
||||
---------------+-----+--------------------------------+------------------------------+-----------------------+-------
|
||||
{4,2,6,7,8,1} | {} | {{white,yellow},{pink,orange}} | {{black,red},{green,orange}} | {2.1,3.3,1.8,1.7,1.6} | {1.6}
|
||||
(1 row)
|
||||
|
||||
|
||||
@@ -217,3 +217,28 @@ select '{
|
||||
@ 1 hour @ 42 minutes @ 20 seconds
|
||||
}'::interval[];
|
||||
-- all of the above should be accepted
|
||||
|
||||
-- tests for array aggregates
|
||||
CREATE TEMP TABLE arraggtest ( f1 INT[], f2 TEXT[][], f3 FLOAT[]);
|
||||
|
||||
INSERT INTO arraggtest (f1, f2, f3) VALUES
|
||||
('{1,2,3,4}','{{grey,red},{blue,blue}}','{1.6, 0.0}');
|
||||
INSERT INTO arraggtest (f1, f2, f3) VALUES
|
||||
('{1,2,3}','{{grey,red},{grey,blue}}','{1.6}');
|
||||
SELECT max(f1), min(f1), max(f2), min(f2), max(f3), min(f3) FROM arraggtest;
|
||||
|
||||
INSERT INTO arraggtest (f1, f2, f3) VALUES
|
||||
('{3,3,2,4,5,6}','{{white,yellow},{pink,orange}}','{2.1,3.3,1.8,1.7,1.6}');
|
||||
SELECT max(f1), min(f1), max(f2), min(f2), max(f3), min(f3) FROM arraggtest;
|
||||
|
||||
INSERT INTO arraggtest (f1, f2, f3) VALUES
|
||||
('{2}','{{black,red},{green,orange}}','{1.6,2.2,2.6,0.4}');
|
||||
SELECT max(f1), min(f1), max(f2), min(f2), max(f3), min(f3) FROM arraggtest;
|
||||
|
||||
INSERT INTO arraggtest (f1, f2, f3) VALUES
|
||||
('{4,2,6,7,8,1}','{{red},{black},{purple},{blue},{blue}}',NULL);
|
||||
SELECT max(f1), min(f1), max(f2), min(f2), max(f3), min(f3) FROM arraggtest;
|
||||
|
||||
INSERT INTO arraggtest (f1, f2, f3) VALUES
|
||||
('{}','{{pink,white,blue,red,grey,orange}}','{2.1,1.87,1.4,2.2}');
|
||||
SELECT max(f1), min(f1), max(f2), min(f2), max(f3), min(f3) FROM arraggtest;
|
||||
|
||||
Reference in New Issue
Block a user