Solución:
Puedes probar esto:
select
count(distinct tag) as tag_count,
count(distinct (case when entryId > 0 then tag end)) as positive_tag_count
from
your_table_name;
El primero count(distinct...)
es fácil. El segundo, parece algo complejo, en realidad es el mismo que el primero, excepto que usa case...when
cláusula. En el case...when
cláusula, filtra solo los valores positivos. Los ceros o valores negativos se evaluarían como null
y no se incluirá en el recuento.
Una cosa a tener en cuenta aquí es que esto se puede hacer leyendo la tabla una vez. Cuando parece que tiene que leer la misma tabla dos o más veces, en realidad puede hacerlo leyendo una vez, la mayor parte del tiempo. Como resultado, terminará la tarea mucho más rápido con menos E / S.
Pruebe la siguiente declaración:
select distinct A.[Tag],
count(A.[Tag]) as TAG_COUNT,
(SELECT count(*) FROM [TagTbl] AS B WHERE A.[Tag]=B.[Tag] AND B.[ID]>0)
from [TagTbl] AS A GROUP BY A.[Tag]
El primer campo será la etiqueta, el segundo será el recuento completo y el tercero será el recuento de los positivos.