如果组中有值,如何编写SQL来计算group by之后的列中出现值的总数,同时将count作为1?

如果组中有值,如何编写SQL来计算group by之后的列中出现值的总数,同时将count作为1?,sql,pandas,Sql,Pandas,我有一个数据结构如下 ColumnA ColumnB ColumnC ------------------------- 1 1 Test 1 1 FAIL 1 1 FAIL 1 2 FAIL 1 2 FAIL 1 2 FAIL 2 1 TEST 2 1

我有一个数据结构如下

ColumnA  ColumnB  ColumnC
-------------------------
  1         1      Test
  1         1      FAIL
  1         1      FAIL

  1         2      FAIL
  1         2      FAIL
  1         2      FAIL

  2         1      TEST
  2         1      FAIL
正如标题所示,在按
ColumnA
ColumnB
分组后,我想计算
ColumnC
中“失败”的发生率,并且在计算发生率时,我只想计算组中的一个“失败”

例如,如果我对上述示例数据进行计数,结果将是:

ColumnA ColumnB count
---------------------------
   1      1       1 (not 2)
   1      2       1 (not 3)
   2      1       1
到目前为止,我所做的SQL:

SELECT
    SUM((CASE ColumnC WHEN 'FAIL' THEN 1 WHEN 'TEST' THEN 0 WHEN 'Test' THEN 0 END))
FROM
    table
GROUP BY 
    ColumnA, ColumnB
上面的查询统计组中的每一个“失败”(上面的示例在
列A
中给出了4:1),但我只想统计组中的一次。我应该如何处理这个问题

pandas
中,我可以通过使用
cumcount
向其添加序列来更改值,并通过添加序列号来更改值,然后在
分组后只计算'FAIL1'


可以在SQL中执行吗?

这回答了问题的原始版本

我想您需要
count(distinct)

或者更简洁地说:

select columnA, count(distinct columnB)
from t
where columnC = 'Fail'
group by columnA;

非常感谢。我可以用这个来得到我在问题中发布的结果。后来我意识到我实际上也希望视图中有columnB。因此,当我在SELECT中包含ColumnB时,我必须将它包含在GROUPBY子句中,因此它计数为1或0,因为只有1个不同的行或没有。我也更新了问题,以便正确地思考我想要什么。@JeevaBharathi。这回答了你在这里提出的问题。如果你有一个不同的(或更精炼的问题)而不是作为一个新问题提问。修改问题使答案无效是不礼貌的,明白了吗。道歉
select columnA, count(distinct columnB)
from t
where columnC = 'Fail'
group by columnA;
select distinct columnA,count(ColumnC)
from t
where columnC = 'Fail'
group by columnA,columnB
order by columnA;