J'essaie de compter les lignes qui ont une combinaison distincte de 2 colonnes dans Amazon redshift. La requête que j'utilise est -
select count(distinct col1, col2)
from schemaname.tablename
where some filters
Il me jette cette erreur -
Amazon Opération non valide: le nombre de fonctions (variable selon les caractères, bigint) n'existe pas`
J'ai essayé de caster bigint
en char
mais cela n'a pas fonctionné.
vous pouvez utiliser une sous-requête et compter
select count(*) from (
select distinct col1, col2
from schemaname.tablename
where some filter
) as t
Un peu tard pour la fête mais quand même: vous pouvez aussi essayer de concaténer des colonnes en utilisant opérateur . Il pourrait être inefficace, donc je ne l'utiliserais pas dans le code prod, mais pour une analyse ad hoc, ça devrait aller.
select count(distinct col1 || '_' || col2)
from schemaname.tablename
where some filters
Notez que le choix du séparateur peut être important, c'est-à-dire les deux 'foo' || '_' || 'bar_baz'
et 'foo_bar' || '_' || 'baz'
rendement 'foo_bar_baz'
et sont donc égaux. Dans certains cas, cela peut être préoccupant, dans certains cas, il est si insignifiant que vous pouvez ignorer complètement le séparateur.
Si vous essayez simplement de faire count(distinct)
alors la réponse de Zaynul est correcte. Si vous souhaitez également d'autres agrégations, voici une autre méthode:
select . . .,
sum(case when seqnum = 1 then 1 else 0 end) as col1_col2_unique_count
from (select t.*,
row_number() over (partition by col1, col2 order by col1) as seqnum
from schemaname.tablename t
where some filters
) c
Vous pouvez utiliser
sélectionnez col1, col2, count (*) dans schemaname.tablename where - votre groupe de filtres par col1, col2