Gunnar Wolf escribió: > SELECT * FROM ( > SELECT email, array_agg(show_keyid(keyid)) AS keys, > cardinality(array_agg(show_keyid(keyid))) as numkeys > FROM pubkey_metadata GROUP BY email) AS set > WHERE '673a03e4c1db921f' = ANY(keys); > > Comparando sus query plans y tiempos de ejecución me parecen casi > sinónimos. Pero, sí, la versión con ANY resulta un poco más legible y > clara para el humano, que no es poca cosa :) > > (¿que por qué usé un subquery para algo tan trivial como esto? Porque > si no, el ANY(keys) se quejaba de que keys no existía, y no puedo > incluir una función en el WHERE).
Ah, claro. Creo que puedes escribirlo más elegante así: SELECT email, array_agg(show_keyid(keyid)) AS keys, cardinality(array_agg(show_keyid(keyid))) as numkeys FROM pubkey_metadata GROUP BY email HAVING '673a03e4c1db921f' = ANY(array_agg(show_keyid(keyid))); WHERE aplica a los registros de entrada a la agrupación, antes de ser agrupados (por eso no puedes poner la función ahí); HAVING aplica después de la agrupación. -- Álvaro Herrera https://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services - Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda@postgresql.org) Para cambiar tu suscripción: http://www.postgresql.org/mailpref/pgsql-es-ayuda