SQL 按给定出生日期的年龄对客户进行分组
SQL group customers by age given date of birth
我正在尝试编写一个 SQL 脚本来按年龄类别(0 - 10、11 - 20、21 - 30 ... 111 - 120)对客户进行分组,仅给出他们的出生日期。我知道这将涉及 datediff,因为我无法理解它。我的数据库的 ER 图如下,你可以在 personal_details table 中找到生日。非常感谢所有帮助!!
最好的方法可能是 table 加入您的年龄段并加入
SELECT *
FROM Personal_details p
INNER JOIN age_categories ac
ON TIMESTAMPDIFF(YEAR, p.birthday, CURDATE())
BETWEEN ac.age_min AND ac.age_max
另一种方法是使用 CASE
,但不如真正的 table 清晰,您可以更新以创建新的年龄类别...( 0-18;18-30;... )
CASE 版本:
SELECT *,
CASE
WHEN TIMESTAMPDIFF(YEAR, p.birthday, CURDATE())
BETWEEN 0 AND 10 THEN '0-10'
WHEN TIMESTAMPDIFF(YEAR, p.birthday, CURDATE())
BETWEEN 11 AND 20 THEN '11-20'
-- ...
END AS age_categorie
FROM Personal_details p
我正在尝试编写一个 SQL 脚本来按年龄类别(0 - 10、11 - 20、21 - 30 ... 111 - 120)对客户进行分组,仅给出他们的出生日期。我知道这将涉及 datediff,因为我无法理解它。我的数据库的 ER 图如下,你可以在 personal_details table 中找到生日。非常感谢所有帮助!!
最好的方法可能是 table 加入您的年龄段并加入
SELECT *
FROM Personal_details p
INNER JOIN age_categories ac
ON TIMESTAMPDIFF(YEAR, p.birthday, CURDATE())
BETWEEN ac.age_min AND ac.age_max
另一种方法是使用 CASE
,但不如真正的 table 清晰,您可以更新以创建新的年龄类别...( 0-18;18-30;... )
CASE 版本:
SELECT *,
CASE
WHEN TIMESTAMPDIFF(YEAR, p.birthday, CURDATE())
BETWEEN 0 AND 10 THEN '0-10'
WHEN TIMESTAMPDIFF(YEAR, p.birthday, CURDATE())
BETWEEN 11 AND 20 THEN '11-20'
-- ...
END AS age_categorie
FROM Personal_details p