web-dev-qa-db-ja.com

赤方偏移の異なる複数の列を数える

Amazon redshiftで2列の明確な組み合わせを持つ行をカウントしようとしています。私が使用しているクエリは-

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

このエラーがスローされます-

Amazonの無効な操作:関数カウント(文字が異なる、bigint)が存在しません `

bigintcharにキャストしようとしましたが、うまくいきませんでした。

7
Janusz01

サブクエリとカウントを使用できます

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

パーティーに少し遅れましたが、とにかく: operator を使用して列を連結することもできます。 mightは非効率的であるため、prodコードでは使用しませんが、アドホック分析には問題ありません。

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

セパレータの選択に注意してくださいmight問題、すなわち両方'foo' || '_' || 'bar_baz'および'foo_bar' || '_' || 'baz' 産出 'foo_bar_baz'そしてしたがって等しい。場合によってはこれが懸念されるかもしれませんが、場合によってはあまり重要ではないため、セパレータを完全にスキップできます。

3

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

使用できます

schemaname.tablenameからcol1、col2、count(*)を選択します-col1、col2によるフィルターグループ

1
Deepak