4

テーブル (tbl_people) があり、このテーブルには datetime フィールドがあり、グループ化して 10 年のグループでレコードをカウントします...結果は次のようになります
。カウント | 年 |
| | 1000 | 1980-1989 |
| | 250 | 1990-1999 |

これを行うために複数のクエリを作成できますが、それは、範囲ごとに異なるクエリを作成する必要があることを意味します。最小年から上に向かって (10 年間隔で) 動的にインクリメントし、間隔内のレコード数をカウントする方法はありますか?

4

3 に答える 3

5

まず、各行の10年を計算します

select floor(year(`year`) / 10) * 10 as decade
from tbl_people

次に、この中間結果を使用してSQLFiddleをカウントします

select count(*), decade, decade + 9
from (select floor(year(`year`) / 10) * 10 as decade
      from tbl_people) t
group by decade

または、このSQL Fiddle、1つの列に10年が必要な場合

select count(*) as count, concat(decade, '-', decade + 9) as year
from (select floor(year(`year`) / 10) * 10 as decade
      from tbl_people) t
group by decade
于 2012-12-08T17:50:13.793 に答える
0

これは機能するはずです-SQL Fiddle(この素晴らしいサイトが存在することを教えてくれたOlaf Dietscheに感謝します):

SELECT
    COUNT(`year`) as `count`,
    CONCAT(
        FLOOR(YEAR(`year`) / 10) * 10, 
        '-', 
        (CEIL(YEAR(`year`) / 10) * 10) - 1
    ) as `year`
FROM
    `tbl_people`
GROUP BY
    CONCAT(
        FLOOR(YEAR(`year`) / 10) * 10,
        '-', 
        (CEIL(YEAR(`year`) / 10) * 10) - 1
    )

数字が 1992 の場合、 は 、 の場合はにFLOOR(1992 / 10)なります。=と times = 、マイナスについても同じことが言えます。199101990CEIL(1992 / 10)20010200011999year1990-1999

于 2012-12-08T17:17:35.677 に答える
0

これは役に立ちます。

 select CONCAT(FLOOR(YEAR(from_unixtime(TIMESTAMP))/10)*10,'-',(FLOOR(YEAR(from_unixtime(TIMESTAMP))/10)*10)+9) as year , count(ID) from 
    TABLE group by FLOOR(YEAR(from_unixtime(TIMESTAMP))/10)*10;
于 2012-12-08T18:18:40.743 に答える