需要一些帮助,不知道这个问题的关键字上网搜索我想数一些还没完成的程序当progres有step3时,它不被计算在内这个例子的预期结果是2,我试图单独做,但它不起作用需要帮助,谢谢
zmeyuzjn1#
一种方法使用 count(distinct) 和过滤器 where 条款:
count(distinct)
where
select count(distinct progres) from t where not exists (select 1 from t t2 where t2.progres = t.progres and t2.step = 'step3');
另一种有趣的方式使用了一种不同:
select count(distinct progres) - count(distinct case when step = 'step3' then progres end) from t;
如果 'step3' 每次最多出现一次 progres ,可以简化为:
'step3'
progres
select count(distinct progres) - sum(step = 'step3') from t;
或使用集合操作:
select count(*) from ((select progres from t) except -- removes duplicates (select progres from t where step = 'step3') ) t;
41ik7eoe2#
你可以做:
select count(distinct progress) - (select count(*) from t where step = 'step3') from t
2条答案
按热度按时间zmeyuzjn1#
一种方法使用
count(distinct)
和过滤器where
条款:另一种有趣的方式使用了一种不同:
如果
'step3'
每次最多出现一次progres
,可以简化为:或使用集合操作:
41ik7eoe2#
你可以做: