mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-09-13 18:19:37 +02:00
dd979f66be
SELECT DISTINCT ON (expr [, expr ...]) targetlist ... and there is a check to make sure that the user didn't specify an ORDER BY that's incompatible with the DISTINCT operation. Reimplement nodeUnique and nodeGroup to use the proper datatype-specific equality function for each column being compared --- they used to do bitwise comparisons or convert the data to text strings and strcmp(). (To add insult to injury, they'd look up the conversion functions once for each tuple...) Parse/plan representation of DISTINCT is now a list of SortClause nodes. initdb forced by querytree change...
67 lines
1.5 KiB
Plaintext
67 lines
1.5 KiB
Plaintext
--
|
|
-- SELECT_DISTINCT_ON
|
|
--
|
|
SELECT DISTINCT ON (string4) string4, two, ten
|
|
FROM tmp
|
|
ORDER BY string4 using <, two using >, ten using <;
|
|
string4 | two | ten
|
|
---------+-----+-----
|
|
AAAAxx | 1 | 1
|
|
HHHHxx | 1 | 1
|
|
OOOOxx | 1 | 1
|
|
VVVVxx | 1 | 1
|
|
(4 rows)
|
|
|
|
-- this will fail due to conflict of ordering requirements
|
|
SELECT DISTINCT ON (string4, ten) string4, two, ten
|
|
FROM tmp
|
|
ORDER BY string4 using <, two using <, ten using <;
|
|
ERROR: SELECT DISTINCT ON expressions must match initial ORDER BY expressions
|
|
SELECT DISTINCT ON (string4, ten) string4, ten, two
|
|
FROM tmp
|
|
ORDER BY string4 using <, ten using >, two using <;
|
|
string4 | ten | two
|
|
---------+-----+-----
|
|
AAAAxx | 9 | 1
|
|
AAAAxx | 8 | 0
|
|
AAAAxx | 7 | 1
|
|
AAAAxx | 6 | 0
|
|
AAAAxx | 5 | 1
|
|
AAAAxx | 4 | 0
|
|
AAAAxx | 3 | 1
|
|
AAAAxx | 2 | 0
|
|
AAAAxx | 1 | 1
|
|
AAAAxx | 0 | 0
|
|
HHHHxx | 9 | 1
|
|
HHHHxx | 8 | 0
|
|
HHHHxx | 7 | 1
|
|
HHHHxx | 6 | 0
|
|
HHHHxx | 5 | 1
|
|
HHHHxx | 4 | 0
|
|
HHHHxx | 3 | 1
|
|
HHHHxx | 2 | 0
|
|
HHHHxx | 1 | 1
|
|
HHHHxx | 0 | 0
|
|
OOOOxx | 9 | 1
|
|
OOOOxx | 8 | 0
|
|
OOOOxx | 7 | 1
|
|
OOOOxx | 6 | 0
|
|
OOOOxx | 5 | 1
|
|
OOOOxx | 4 | 0
|
|
OOOOxx | 3 | 1
|
|
OOOOxx | 2 | 0
|
|
OOOOxx | 1 | 1
|
|
OOOOxx | 0 | 0
|
|
VVVVxx | 9 | 1
|
|
VVVVxx | 8 | 0
|
|
VVVVxx | 7 | 1
|
|
VVVVxx | 6 | 0
|
|
VVVVxx | 5 | 1
|
|
VVVVxx | 4 | 0
|
|
VVVVxx | 3 | 1
|
|
VVVVxx | 2 | 0
|
|
VVVVxx | 1 | 1
|
|
VVVVxx | 0 | 0
|
|
(40 rows)
|
|
|