簡體   English   中英

計算紅移中不同的多列

[英]Count distinct multiple columns in redshift

我正在嘗試計算在 Amazon redshift 中具有 2 列不同組合的行。 我正在使用的查詢是 -

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

它向我拋出了這個錯誤 -

亞馬遜無效操作:函數計數(字符變化,bigint)不存在`

我嘗試將bigintchar但沒有用。

您可以使用子查詢和計數

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

聚會有點晚,但無論如何:您也可以嘗試使用||連接列 運營商 可能效率低下,所以我不會在生產代碼中使用它,但對於臨時分析應該沒問題。

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

注意分隔符的選擇可能很重要,即'foo' || '_' || 'bar_baz' 'foo' || '_' || 'bar_baz' 'foo' || '_' || 'bar_baz''foo_bar' || '_' || 'baz' 'foo_bar' || '_' || 'baz' 'foo_bar' || '_' || 'baz'產生'foo_bar_baz' ,因此是相等的。 在某些情況下,這可能是一個問題,在某些情況下,它是如此微不足道,您可以完全跳過分隔符。

您可以使用

select col1,col2,count(*) from schemaname.tablename
where -- your filter
group by col1,col2

如果您只是想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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM