How do I count the number of distinct elements in an array object, created by ARRAY_AGG()
in PostgresQL? Here's a toy example for discussion purposes:
SELECT ARRAY_AGG (first_name || ' ' || last_name) actors
FROM film
I have tried ARRAY_LENGTH()
, LENGTH()
, etc., like so:
SELECT ARRAY_LENGTH(a.actors)
FROM (SELECT ARRAY_AGG (first_name || ' ' || last_name) actors
FROM film) a;
But I get an error:
function array_length(integer[]) does not exist
Hint: No function matches the given name and argument types. You might need to add explicit type casts.
Position: 208
So I tried (2):
SELECT ARRAY_LENGTH( CAST(COALESCE(a.actors, '0') AS integer) )
FROM (SELECT ARRAY_AGG (first_name || ' ' || last_name) actors
FROM film) a;
but I get the error:
malformed array literal: "0"
Detail: Array value must start with "{" or dimension information.
Position: 119
COUNT
at the same level as theARRAY_AGG
. Something like:SELECT ARRAY_AGG (first_name || ' ' || last_name) actors, COUNT(*) FROM film
COUNT(*)
so the result is just1
even if there is more than 1 element in the array.concat_ws(' ', first_name, last_name)
is a bit easier to use and will properly deal with null values and empty strings