あなたのバンドを含むテーブルを作成します。
CREATE TABLE agebands
(
id INT NOT NULL PRIMARY KEY,
lower_bound INT NOT NULL,
upper_bound INT NOT NULL
)
CREATE INDEX IDX_agebands_bounds ON (lower_bound, upper_bound)
次に、あなたのデータを移入:
INSERT INTO agebands VALUES (1, 0, 12)
INSERT INTO agebands VALUES (2, 13, 17)
INSERT INTO agebands VALUES (3, 18, 24)
INSERT INTO agebands VALUES (4, 25, 199)
そして、それに参加する:
SELECT
lower_bound, upper_bound,
COUNT(*) AS number_of_people
FROM
persons
INNER JOIN agebands
ON person_age BETWEEN lower_bound AND upper_bound
GROUP BY
lower_bound, upper_bound
ORDER BY
lower_bound
これは、することができますバンド調整の柔軟性s。もちろん、ここでUNIONを使用する他の答えも使えます。これは、データベースに別のテーブルを追加する/できないようにするとより適切です。次
@Mich、「18-25」と「25歳以上」の年齢帯が重なっています。 –
@ Lieven Lievenさんが見つけたのは、遅くて夜のことだったのですが(それは私の言い訳です!)、私はそれが生産コードにないことを保証することができます... – Mitch