2012-05-19 18 views
6

Aşağıdaki sorguyu çok kullanıyorum ama eminim ki bunu yapmanın daha verimli bir yolu olmalı.Tarih/yyyy sorgusunu çalıştırmak için daha etkili bir yol?

Temelde, bir kullanıcı tablonun içindeki insanlar doğmuş onlarca yıl sayıyorum:

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

: insanlar doğmuş yıllardır saymak? – Aprillion

+0

@deathApril Hayır, sorgu, her on yılda –

+0

için kaç tane ayrı bir satır gösteriyor ki, benzersiz bir 'user_id'siniz yok? – Aprillion

cevap

6

Kullanıcıların on hesaplamak ve gruba kullanabilirsiniz:

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

+1, ancak yyyy DIV 10’un biraz daha net olmasına rağmen (sadece IMHO). –

0

için Bu belirli `user_id` için sayım = 1 ve yyyy ile 1 satır dönmez

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