1

これは、 SQL を使用して日付型の誕生日フィールドから年齢を取得する に関するフォローアップの質問です。dateMySQL データベースにユーザーの誕生日用のフィールドがあり、次のクエリを使用して年齢を取得します。

SELECT 
    ROUND(DATEDIFF(
        Cast((SELECT NOW()) as Date),
        Cast(birthday as Date)
    ) / 365, 0) as age
FROM member

次に、さまざまな年齢グループの人数を選択する必要があります。たとえば、13 ~ 17、18 ~ 21、22 ~ 25、26 ~ 35、36 ~ 50、51 ~ MAX の年齢グループに属する人数を知る必要があります。

MySQLを使用してそれは可能ですか?

私は次UNIONのように考えました:

SELECT 
    ROUND(DATEDIFF(
        Cast((SELECT NOW()) as Date),
        Cast(birthday as Date)
    ) / 365, 0) as age,
    1 as agegroup
FROM member WHERE age >=13 AND age <=17

UNION

SELECT 
    ROUND(DATEDIFF(
        Cast((SELECT NOW()) as Date),
        Cast(birthday as Date)
    ) / 365, 0) as age
    2 as agegroup
FROM member WHERE age >=18 AND age <=21

しかし、それは長くて醜いでしょう。もっと良い方法があるはずです!

4

3 に答える 3

3
select  AgeGroup
,       count(*)
from    (
        select  case
                when  age between 13 and 17 then 1
                when  age between 18 and 21 then 2
                ...
                end as AgeGroup
        from    (
                SELECT  ROUND(DATEDIFF(Cast(NOW() as Date),
                            Cast(birthday as Date)) / 365, 0) as age
                FROM    YourTable
                ) as SubQueryAlias
        ) as SubQueryAlias2
group by
        AgeGroup
于 2013-06-17T11:45:11.043 に答える
2

別の可能な解決策:-

SELECT  AgeRange.MinAge, AgeRange.MaxAge, COUNT(*)
FROM    
(
    SELECT 13 AS MinAge, 17 AS MaxAge
    UNION SELECT 18, 21
    UNION SELECT 22, 25
    UNION SELECT 26, 35
    UNION SELECT 36, 50
    UNION SELECT 51, 9999
) AgeRange
INNER JOIN YourTable
ON ROUND(DATEDIFF(CAST(NOW() as DATE), CAST(birthday as DATE)) / 365, 0) BETWEEN AgeRange.MinAge AND AgeRange.MaxAge 
GROUP BY AgeRange.MinAge, AgeRange.MaxAge

必要に応じて拡張したり、テーブルから日付範囲を使用するように移行したりするのが簡単になる可能性があります (結果のレポートは、必要に応じてユーザーが簡単に更新できます)。

于 2013-06-17T13:04:34.997 に答える
0

テーブルの列として年齢がある場合、次のようにします。

SELECT
    SUM(CASE WHEN age < 10 THEN 1 ELSE 0 END) AS under10,
    SUM(CASE WHEN 10<age AND age <19 THEN 1 ELSE 0 END) AS age10to19,
    .
    .
    .
FROM table

年齢が独自の列にないため、または追加の範囲または別の範囲が必要な場合は、マイナーな変更が行われる可能性があります。私はあなたがそれらを自分で解決できると確信しています!

于 2013-06-17T11:46:07.803 に答える