mysql - SQL 按给定出生日期的年龄对客户进行分组

标签 mysql sql datediff

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

enter image description here

最佳答案

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

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

关于mysql - SQL 按给定出生日期的年龄对客户进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47463251/

相关文章:

php - 调试 sql 查询如果失败

mysql - 在 sql 结果中填充空日期的最直接方法是什么(在 mysql 或 perl 端)?

php - PHP 中的 SQL 查询搜索 3 个表

replication - mysql转储会破坏复制吗?

mysql - sql:在属性表中选择一个值

mysql - DATEDIFF - 将 NULL 替换为 NOW()

average - 如何获得 Tableau 中多个日期之间的平均天数

php - 将数据添加到默认工厂 - laravel 5.4

mysql - 如何删除Mysql中的空行?

sql - 可扩展的 MySQL 数据库,用于类似邮件的消息传递