In PostgreSQL 12.1 Documentation chapter 4.2.7. Aggregate Expressions  it says


The syntax of an aggregate expression is one of the following:
  ... 
aggregate_name (DISTINCT expression [ , ... ] [ order_by_clause ] ) [ FILTER ( 
WHERE filter_clause ) ]
...

I believe this is incorrect in the case where the DISTINCT is on a 
comma-separated list of expressions.
It would imply that this is legal

select count(DISTINCT parent_id , name) from  mytable

but that is rejected with 
ERROR:  function count(bigint, text) does not exist

whereas 

select count(DISTINCT ( parent_id , name) ) from mytable

is accepted.

So I think to handle all cases the line in the doc should read

aggregate_name (DISTINCT ( expression [ , ... ] ) [ order_by_clause ] ) [ 
FILTER ( WHERE filter_clause ) ]

I don't know how to indicate that those extra parentheses can be omitted if the 
list has only one expression.

Cheers,  John Lumby

Reply via email to