Amazon redshiftで2列の明確な組み合わせを持つ行をカウントしようとしています。私が使用しているクエリは-
select count(distinct col1, col2)
from schemaname.tablename
where some filters
このエラーがスローされます-
Amazonの無効な操作:関数カウント(文字が異なる、bigint)が存在しません `
bigint
をchar
にキャストしようとしましたが、うまくいきませんでした。
サブクエリとカウントを使用できます
select count(*) from (
select distinct col1, col2
from schemaname.tablename
where some filter
) as t
パーティーに少し遅れましたが、とにかく: operator を使用して列を連結することもできます。 mightは非効率的であるため、prodコードでは使用しませんが、アドホック分析には問題ありません。
select count(distinct col1 || '_' || col2)
from schemaname.tablename
where some filters
セパレータの選択に注意してくださいmight問題、すなわち両方'foo' || '_' || 'bar_baz'
および'foo_bar' || '_' || 'baz'
産出 'foo_bar_baz'
そしてしたがって等しい。場合によってはこれが懸念されるかもしれませんが、場合によってはあまり重要ではないため、セパレータを完全にスキップできます。
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
使用できます
schemaname.tablenameからcol1、col2、count(*)を選択します-col1、col2によるフィルターグループ