2012-04-02 17 views
9

Tengo estructura de tabla como se muestra en la primera tabla.¿Cómo optimizar esto en MySQL?

Y desea obtener recuentos masculinos y femeninos en una sola consulta para que la solicitud vaya solo una vez al servidor.

How to optimize this in MySQL ?

+0

Tenga en cuenta que sé cómo recuperar todos los datos. Pero quiero hacer esto utilizando la optimización – Thompson

+1

+1 Gracias por mostrar claramente la entrada y la salida deseada. – pilcrow

+0

@pilcrow: Gracias. – Thompson

Respuesta

11

Esto es lo que hay que hacer:

select gender, 
     count(case when age between 0 and 20 then 1 else null end) Age_0_20, 
     count(case when age between 21 and 40 then 1 else null end) Age_21_40 
from yourtable 
group by gender 

Ajuste de conformidad :)

actualización, con aclaraciones

Tenga en cuenta que COUNT función de agregado no solamente las cuentas -null valores. Por lo tanto, los valores else en case deben ser NULL. El valor When devuelve 1 pero podría ser cualquier valor no nulo.

Algunas personas implementar esto usando SUM:

select gender, 
     sum(case when age between 0 and 20 then 1 else 0 end) Age_0_20, 
     sum(case when age between 21 and 40 then 1 else 0 end) Age_21_40 
from yourtable 
group by gender 

El resultado va a ser absolutamente el mismo.

+0

su error regresar ** # 1064 - Usted tiene un error en! su sintaxis SQL; revise el manual que corresponde a su versión del servidor MySQL para la sintaxis correcta para usar cerca de 'que 1 else 0 final) Age_0_19, suma (caso cuando tiene entre 20 y 40 años de edad que 1 e' en la línea 2 ** – Thompson

+4

¿Acaba de escribir ' que 'en lugar de 'entonces'? –

+0

¡Ups! Lo siento, escribí ** que ** en lugar de ** luego ** porque ya estaba dando error ** # 1064 - Usted tiene un error en su sintaxis de SQL; manual que corresponde a su versión del servidor MySQL para la sintaxis correcta para usar cerca de 'grupo por género' en la línea 4 ** – Thompson

Cuestiones relacionadas