Necesita ayuda, no conozca la palabra clave de este problema para buscar en línea

Quiero contar algunos progresos que no se han hecho.

table-example

Cuando progres tiene paso 3, entonces no se cuenta

El resultado deseado de ese ejemplo es 2, estoy tratando de hacerlo solo, y no funciona

Se necesita ayuda, gracias por delante

0
toolSA 26 jun. 2020 a las 20:16

2 respuestas

La mejor respuesta

Un método usa count(distinct) y filtra en la cláusula where:

select count(distinct progres)
from t
where not exists (select 1 from t t2 where t2.progres = t.progres and t2.step = 'step3');

Otra forma divertida usa la diferencia:

select count(distinct progres) - count(distinct case when step = 'step3' then progres end)
from t;

Si 'step3' puede aparecer como máximo una vez por progres, lo anterior se puede simplificar para:

select count(distinct progres) - sum(step = 'step3')
from t;

O usando operaciones de conjunto:

select count(*)
from ((select progres from t)
      except  -- removes duplicates
      (select progres from t where step = 'step3')
     ) t;
1
Gordon Linoff 26 jun. 2020 a las 17:18

Usted puede hacer:

select
  count(distinct progress)
  -
  (select count(*) from t where step = 'step3')
from t
1
The Impaler 26 jun. 2020 a las 17:18