我试图计算在Amazon redshift中具有2列的不同组合的行。我正在使用的查询是-
select count(distinct col1, col2)
from schemaname.tablename
where some filters
这让我犯了这个错误-
Amazon无效操作:函数计数(字符变化,bigint)不存在
我尝试将bigint
投射到char
,但是没有用。
答案 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