【问题标题】:SQL group customers by age given date of birthSQL 按给定出生日期的年龄对客户进行分组
【发布时间】:2017-11-23 21:06:26
【问题描述】:

我正在尝试编写一个 SQL 脚本,仅根据客户的出生日期按年龄类别(0 - 10、11 - 20、21 - 30... 111 - 120)对客户进行分组。我知道这将涉及 datediff ,因为我无法理解它。我的数据库的ER图如下,你可以在personal_details表中找到生日。非常感谢所有帮助!

【问题讨论】:

  • 请在您目前尝试过的查询中添加所需的结果。

标签: mysql sql datediff


【解决方案1】:

最好的方法可能是用你的年龄类别制作一个表格并进行连接

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,但不如您可以更新以创建新年龄类别的真实表格那么清晰...(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

【讨论】:

  • 你能举个例子吗?我无法更改数据库。
  • @RHamilton 已更新,但如果您可以更改数据库,第一个选项仍然更好...
  • 我尝试了您的案例版本,但它只是返回了一个 age_catagorie 列,其中表末尾的所有值都是空值...我做错了吗?
  • @RHamilton 你必须完成 WHEN :WHEN TIMESTAMPDIFF(YEAR, p.birthday, CURDATE()) BETWEEN @start@ AND @end@ THEN '@libelle_categorie@' 但它按预期工作:sqlfiddle.com/#!9/906e82/2
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-29
  • 2021-09-28
  • 2019-03-09
  • 2022-11-30
  • 1970-01-01
  • 1970-01-01
  • 2020-09-08
相关资源
最近更新 更多