2012-05-19 16 views
6

私は次のクエリをかなりたくさん使っていますが、これを行うにはより効率的な方法が必要であると確信しています。date/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

この特定の 'user_id'ではcount = 1とyyyyで1行を返しませんか? – Aprillion

+0

@deathAprilいいえ、照会は完全に実行され、10年ごとに何回表示されるかという別の行が表示されます。 –

+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 'はおそらくわずかに明確になります(ただIMHO)。 –

0

select substring(yyyy, 1, 3) || '0''s' decade, count(*) howmany 
from bday 
group by decade 
関連する問題