2012-05-19 19 views
6

Uso bastante la siguiente consulta, pero estoy bastante seguro de que debe haber una forma más eficiente de hacerlo.¿Forma más eficiente de ejecutar la consulta de fecha/aaaa?

Básicamente, estoy contando los decenios personas nacidas en, desde el interior de una tabla de usuario:

select count(*) as howmany, yyyy from bday where (((yyyy > '1949') 
AND (yyyy < '1961')) AND (user_id = '63')) UNION 
select count(*) as howmany, yyyy from bday where (((yyyy > '1959') 
AND (yyyy < '1971')) AND (user_id = '63')) UNION 
select count(*) as howmany, yyyy from bday where (((yyyy > '1969') 
AND (yyyy < '1981')) AND (user_id = '63')) UNION 
select count(*) as howmany, yyyy from bday where (((yyyy > '1979') 
AND (yyyy < '1991')) AND (user_id = '63')) UNION 
select count(*) as howmany, yyyy from bday where (((yyyy > '1989') 
AND (yyyy < '2001')) AND (user_id = '63')) 
+2

¿No devuelve 1 fila con la cuenta = 1 y aaaa para este 'user_id' en particular? – Aprillion

+0

@deathApril No, la consulta se ejecuta perfectamente mostrando una línea separada con cuántos para cada década –

+0

por lo que no tiene 'user_id's únicos? – Aprillion

Respuesta

6

Se puede calcular la década y lo utilizan para agrupar los usuarios:

SELECT 
    COUNT(id) AS howmany, 
    CEIL((`yyyy`+1)/10) AS decade, 
    yyyy 
FROM `bday` 
GROUP BY decade 
+0

+1, aunque 'yyyy DIV 10' quizás sea un poco más claro (solo en mi humilde opinión). –

0

a contar las décadas en que las personas nacieron en:

select substring(yyyy, 1, 3) || '0''s' decade, count(*) howmany 
from bday 
group by decade 
Cuestiones relacionadas