variable values uso operador not multiple ejemplos con sql

uso - sql like multiple values



CUENTA DISTINTO con las CONDICIONES (4)

Esto puede funcionar:

SELECT Count(tag) AS ''Tag Count'' FROM Table GROUP BY tag

y

SELECT Count(tag) AS ''Negative Tag Count'' FROM Table WHERE entryID > 0 GROUP BY tag

Quiero contar el número de elementos distintos en una columna sujetos a una determinada condición, por ejemplo, si la tabla es así:

tag | entryID ----+--------- foo | 0 foo | 0 bar | 3

Si deseo contar la cantidad de etiquetas distintas como "conteo de etiquetas" y contar el número de etiquetas distintas con id de entrada> 0 como "recuento de etiquetas positivas" en la misma tabla, ¿qué debo hacer?

Ahora estoy contando desde dos tablas diferentes donde en la segunda tabla solo he seleccionado aquellas filas con entryID mayor que cero. Creo que debería haber una forma más compacta de resolver este problema.


Esto también puede funcionar:

SELECT COUNT(DISTINCT T.tag) as DistinctTag, COUNT(DISTINCT T2.tag) as DistinctPositiveTag FROM Table T LEFT JOIN Table T2 ON T.tag = T2.tag AND T.entryID = T2.entryID AND T2.entryID > 0

Necesita la condición entryID en la combinación left en vez de en where para asegurarse de que cualquier elemento que solo tenga un entryID de 0 se cuente correctamente en la primera DISTINCT.


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, el tercero, los positivos.


Puedes intentar 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 primer count(distinct...) es fácil. El segundo, parece algo complejo, en realidad es el mismo que el primero, excepto que se usa el case...when cláusula. En el case...when cláusula, filtra solo valores positivos. Los ceros o valores negativos serían null y no se incluirán 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 se puede leer una vez, la mayor parte del tiempo. Como resultado, terminará la tarea mucho más rápido con menos E / S.