web-dev-qa-db-fra.com

Compter plusieurs colonnes distinctes dans redshift

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é.

7
Janusz01

vous pouvez utiliser une sous-requête et compter

select count(*) from (
  select distinct col1, col2 
 from schemaname.tablename
  where some filter
) as t
12
Zaynul Abadin Tuhin

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.

3
Mariusz Sakowski

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
1
Gordon Linoff

Vous pouvez utiliser

sélectionnez col1, col2, count (*) dans schemaname.tablename where - votre groupe de filtres par col1, col2

1
Deepak