次のクエリを使用してdobから人の年齢を計算し、10年間隔で年齢をグループ化して頻度グラフを作成します。周波数数は可変ですが可変のbinサイズのMYSQLクエリを書くには?
私は、10年を常に使用する必要はなく、5年間隔、20年間隔または任意の範囲で年齢をグループ化するなど、ユーザーがビンサイズを選択できるようにしたいと考えています。
ビンサイズ(現在10年間)をパラメータとして渡すか、クエリを実行する直前にビンがあらかじめ設定されている別のテーブルから取得できるように、クエリを書き直す必要はありますか?
明らかに私はハードコーディングされたCASEを同じ方法で使用することはできません。それはできますか?
SELECT
CASE
WHEN age = -1 THEN 0 -- null dob
WHEN age >= 0 AND age < 11 THEN 1
WHEN age >= 11 AND age < 21 THEN 2
WHEN age >= 21 AND age < 31 THEN 3
WHEN age >= 31 AND age < 41 THEN 4
WHEN age >= 41 AND age < 51 THEN 5
WHEN age >= 51 AND age < 61 THEN 6
WHEN age >= 61 AND age < 71 THEN 7
WHEN age >= 71 AND age < 81 THEN 8
WHEN age >= 81 AND age < 91 THEN 9
WHEN age >= 91 AND age < 101 THEN 10
WHEN age > 100 THEN 11
END AS Age_Group,
COUNT(age) AS Number_In_Group
FROM
-- this sub query calculates the age from the dob
-- returning -1 if dob is null
(SELECT
IFNULL(
DATE_FORMAT(NOW(), '%Y')
- DATE_FORMAT(dob, '%Y')
- (DATE_FORMAT(NOW(), '00-%m-%d') < DATE_FORMAT(dob, '00-%m-%d'))
, - 1
) AS age
FROM
people
) AS table_age
GROUP BY Age_Group
これは私が私自身がそう、それは他の誰を助けた場合に私の答えを投稿しています、これを解決しているかもしれないと思う、次の標準的な出力
Age_Group Number_In_Group
0 55
2 1
3 37
4 47
5 51
6 112
7 139
8 70
9 30
10 6