【问题标题】:How to count number of distinct ID's where status does not match如何计算状态不匹配的不同 ID 的数量
【发布时间】:2023-01-20 01:23:47
【问题描述】:

我有一个类似于以下的数据集:

我想计算同时具有“发送”和“记录”的不同 ID 的总数。换句话说,状态不匹配(状态字段的值仅限于 SEND 和 REC)。在这种情况下,所需的查询将返回值 2,因为在数据集中有 2 个不同的 ID 同时具有“SEND”和“REC”。

我尝试了以下查询但没有成功,因为每行只能有一个状态,而此查询正在一行中查找这两个状态。

SELECT COUNT(DISTINCT ID) FROM Table WHERE Date BETWEEN '2022-01-19' AND '2022-01-19' AND Status = 'SEND' AND Status = 'REC' ;

【问题讨论】:

    标签: count teradata distinct multiple-conditions


    【解决方案1】:
    SELECT COUNT(DISTINCT ID) FROM table WHERE ID IN (SELECT ID FROM table WHERE status = 'SEND' INTERSECT SELECT ID FROM table WHERE status = 'REC')
    

    【讨论】:

    • 不需要 DISTINCT,INTERSECT 已经返回唯一 ID
    【解决方案2】:

    如果它只有两个不同的值,最有效的方法可能是:

    select count(*)
    from
     (
       SELECT ID 
       FROM Table 
       WHERE Date BETWEEN '2022-01-19' AND '2022-01-19' 
         AND Status IN ('SEND','REC')    -- only two possible values per id
       GROUP BY ID
       HAVING MIN(Status) <> Max(Status) -- both values exist
     ) as dt ;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-20
      • 2021-02-06
      • 1970-01-01
      • 1970-01-01
      • 2020-11-07
      • 1970-01-01
      • 2020-08-13
      相关资源
      最近更新 更多