使用CASE WHEN的条件计数

时间:2016-02-13 07:16:59

标签: sql sum conditional

我有如下表格

CID ITEM    FLAG
C_1 ITEM_1  0
C_1 ITEM_2  1
C_1 ITEM_2  1
C_1 ITEM_2  0
C_2 ITEM_2  0
C_3 ITEM_2  1
C_3 ITEM_2  1
C_3 ITEM_3  1

我希望制作像

这样的表格
CID UNIQ_CNT_OF_CID
ITEM_1  0
ITEM_2  2
ITEM_3  1

问题是 - 我想对同一CID计算一次CID

我试过了,

SELECT  ITEM, CID,
      case when FLAG =1 then count(distinct CID)  else 0 end  as COUNTER 
      from T  
      group by ITEM

请帮助!!

2 个答案:

答案 0 :(得分:1)

如果不让我知道,我想我理解你的问题。

您可以使用窗口函数来完成此任务:

SELECT
ITEM,
COUNT(DISTINCT CID) OVER (PARTITION BY ITEM) AS UNIQ_CNT_OF_CID
FROM T

这将为您提供相同数量的行,因此如果您想要这个行中的唯一,您可以使用CTE或子查询,如下所示:

SELECT DISTINCT
ITEM, UNIQ_CNT_OF_CID
FROM
    (
    SELECT
    ITEM,
    COUNT(DISTINCT CID) OVER (PARTITION BY ITEM) AS UNIQ_CNT_OF_CID
    FROM T
    ) final

答案 1 :(得分:1)

你很亲密。要指出的2个项目:

  1. group by必须包含select中的相同字段(不在聚合函数中)。由于无需按CID分组,因此应从select中删除。
  2. 可以<{1}}使用不属于某个组的字段,但 聚合函数。
  3. 所以修改你的SQL现在看起来像这样:

    CASE

    结果:

    Result