计算redshift中不同的多个列

时间:2018-09-24 05:41:30

标签: sql amazon-redshift

我试图计算在Amazon redshift中具有2列的不同组合的行。我正在使用的查询是-

select count(distinct col1, col2)
from schemaname.tablename
where some filters

这让我犯了这个错误-

  

Amazon无效操作:函数计数(字符变化,bigint)不存在

我尝试将bigint投射到char,但是没有用。

4 个答案:

答案 0 :(得分:8)

您可以使用子查询进行计数

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

答案 1 :(得分:1)

聚会晚了一点,但是无论如何:您也可以尝试使用|| operator来连接列。它可能效率低下,因此我不会在产品代码中使用它,但是对于临时分析应该没问题。

select count(distinct col1 || '_' || col2)
from schemaname.tablename
where some filters

注意分隔符选择可能很重要,即 'foo' || '_' || 'bar_baz''foo_bar' || '_' || 'baz'都产生'foo_bar_baz',因此相等。在某些情况下,这可能令人担忧,在某些情况下,它可以忽略不计,可以完全跳过分隔符。

答案 2 :(得分:0)

您可以使用

从schemaname.tablename中选择col1,col2,count(*) 在哪里-您的过滤器 按col1,col2分组

答案 3 :(得分:0)

如果您只是想做count(distinct),那么Zaynul的答案是正确的。如果还需要其他聚合,这是另一种方法:

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