テーブル (tbl_people) があり、このテーブルには datetime フィールドがあり、グループ化して 10 年のグループでレコードをカウントします...結果は次のようになります
。カウント | 年 |
| | 1000 | 1980-1989 |
| | 250 | 1990-1999 |
これを行うために複数のクエリを作成できますが、それは、範囲ごとに異なるクエリを作成する必要があることを意味します。最小年から上に向かって (10 年間隔で) 動的にインクリメントし、間隔内のレコード数をカウントする方法はありますか?
質問する
4702 次
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 = 、マイナスについても同じことが言えます。199
10
1990
CEIL(1992 / 10)
200
10
2000
1
1999
year
1990-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 に答える