1

これは、特定の年齢範囲に何人の人がいるか (パーセント) を調べるために使用する SQL ステートメントです。

SELECT
CASE 
WHEN FLOOR(DATEDIFF(NOW(), adherent_naissance)/365.4) <= 10 THEN '-10' 
WHEN FLOOR(DATEDIFF(NOW(), adherent_naissance)/365.4) <= 20 THEN '11-20'
    WHEN FLOOR(DATEDIFF(NOW(), adherent_naissance)/365.4) <= 30 THEN '21-30'
    WHEN FLOOR(DATEDIFF(NOW(), adherent_naissance)/365.4) <= 60 THEN '31-60'
ELSE '60+' 
END AS Age, 
(Count(adherent_naissance)* 100 / (Select Count(*) From adherent)) as Pourcentage
FROM adherent
GROUP BY 
CASE 
WHEN Age <= 10 THEN '-10' 
WHEN Age <= 20 THEN '11-20'
    WHEN Age <= 30 THEN '21-30'
    WHEN Age <= 60 THEN '31-60'
ELSE '60+' 
END

誰かが「Else」カテゴリに分類される場合を除いて、すべて正常に機能しています。その後、奇妙な動作が発生します。その人は前のカテゴリにカウントされます。

つまり、私が得たということです:

Age     Pourcentage
11-20   33.3333
21-30   33.3333
31-60   33.3333

それ以外の :

Age     Pourcentage
11-20   33.3333
21-30   33.3333
31-60   16.6667
60+     16.6667

ELSE '60'どちらも機能しませんが、ELSE 'Others'機能します...

何か案が ?ありがとう !

NOTE (テストデータ) :SELECT adherent_naissance FROM adherent WHERE 1戻る

adherent_naissance
1991-01-09
1990-03-28
1995-09-10
1964-01-10
1992-08-19
1920-02-21

それが役立つ場合は、MySQL 5.5.24-log を使用しています。

4

1 に答える 1