2009-08-21 16 views
11

Muy bien, entonces lo que estoy tratando de hacer es realizar diferentes COUNT() s en la misma tabla en función de diferentes criterios sin consultas anidadas (eficiencia) o subconsultas (por lo que se puede convertir en una vista). es posible?mySQL: Múltiples COUNT() s basadas en diferentes criterios

Ejemplo: una tabla tiene una columna de fecha: la consulta debe poder generar un recuento del número de filas anteriores a & después de una fecha constante.

Respuesta

28

Está utilizando MySQL, por lo que puede aprovechar su función que una expresión booleana evalúa a 0 para falso y 1 para verdadero. El SUM() de 1 es igual a COUNT() donde la expresión es verdadera.

SELECT SUM(date_column < '2009-08-21') AS prior_to_date, 
     SUM(date_column > '2009-08-21') AS after_date 
FROM MyTable; 

PD: No intente esto en otras marcas de base de datos que sustentan el comportamiento estándar SQL, es decir, una expresión booleana produce un booleano, no es un número entero 0 ó 1.

+0

Bueno, eso funciona muy bien. En otras bases de datos que usan sintaxis SQL supongo que tener una IF dentro de la SUM que retorna 1 o 0 dada la condición debería funcionar también. – dborba

+1

Sí. Pero use expresiones 'CASE' si quiere ser más portátil. No hay 'IF()' en SQL estándar. –

+0

Probé con múltiples y separados. El problema que encontré fue si incluí una instrucción select separada con la cláusula where necesaria, entonces mysql usa el índice, pero cuando se combina, no usa el índice. Comprobado usando explicaciones –

Cuestiones relacionadas