2012-05-19 25 views
6

我使用以下查询相当多,但我很确定必须有一个更有效的方法来做到这一点。更有效的方式来运行日期/ yyyy查询?

基本上,我指望的人出生在几十年中,从用户表内:

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

是否它返回1行count = 1和yyyy为这个特定的'user_id'? – Aprillion

+0

@deathApril不,查询完美地显示一个单独的行,每十年有多少个 –

+0

因此您没有唯一的'user_id'? – Aprillion

回答

6

就可以计算出十年并用它来组的用户:

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

+1,虽然'yyyy DIV 10'可能会稍微更清晰(只是恕我直言)。 –

0

到算出几十年出生的人:

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