2012-05-19 58 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