【问题标题】:Get Distinct Values Based on a Second Column in Teradata根据 Teradata 中的第二列获取不同的值
【发布时间】:2021-05-05 13:59:20
【问题描述】:

我的桌子是这样的:

我正在尝试根据 teradata 中的第二列获取 repunit 的不同值,如下所示:

通过运行此查询:

SELECT 
    DISTINCT foo."repunit", 
    COALESCE(foo."country",'NO-COUNTRY') 
    FROM db.table AS foo

它没有按预期工作,我得到了很多 NULLs 作为结果,而没有 NO-COUNTRY

【问题讨论】:

  • 请注意,DISTINCT 属于 SELECT。 IE。我会把SELECT DISTINCT 放在第一行。
  • 但是,这里不需要 SELECT DISTINCT,而是使用 GROUP BY。

标签: sql teradata distinct


【解决方案1】:

执行GROUP BY 以获取每个 reunit 值的一行。使用MAX()(或MIN())选择一个非空值。如果未找到国家/地区,请使用 COALESCE() 返回 NO-COUNTRY。

SELECT 
    foo."repunit", 
    COALESCE(MAX(foo."country"),'NO-COUNTRY') 
FROM db.table AS foo
GROUP BY foo."repunit"

如果还有代表NO-VALUE的空白值:

SELECT 
    foo."repunit", 
    case when MAX(foo."country") <> ' ' then MAX(foo."country")
         else 'NO-COUNTRY'
    end  
FROM db.table AS foo
GROUP BY foo."repunit"

【讨论】:

  • 它有效,但是我在foo."country" 列上收到了很多“空白”。这些不是NULL,但仍然不行。知道如何避免这些吗?
  • 国家列中是否也有“空白”值?
  • 是的。很多。
  • 或更短,但有点难以理解:COALESCE(NULLIF(MAX(foo."country"),''),'NO-COUNTRY')
  • @dnoeth,不知什么原因,我从不使用 NULLIF。
猜你喜欢
  • 2021-07-08
  • 2021-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-31
相关资源
最近更新 更多