【问题标题】:How to use multiple group by conditions in mysql如何在mysql中使用多个分组条件
【发布时间】:2016-04-18 15:40:10
【问题描述】:

我有一个 customer_master 表。在该表中,我有两列分别称为 customer_id 和 date_of_birth。
我想要的是按他们的年龄范围计算客户组。像这样的东西。

到目前为止,这是我可以尝试的唯一查询。

选择 COUNT(customer_id) AS count FROM customer_master WHERE (DATEDIFF(CURDATE(),date_of_birth) / 365.25)
这个你能帮我吗。谢谢。


在大家的帮助下,我找到了比你们更完美的答案。

SELECT CASE

 WHEN (DATEDIFF( CURDATE(),STR_TO_DATE(date_of_birth, '%Y-%m-%d')) / 365) <= 20 THEN 'Below 20'
            WHEN(DATEDIFF( CURDATE(),STR_TO_DATE(date_of_birth, '%Y-%m-%d')) / 365) <= 30 THEN 'Below 30'
            WHEN (DATEDIFF( CURDATE(),STR_TO_DATE(date_of_birth, '%Y-%m-%d')) / 365) <= 40 THEN 'Below 40'
            WHEN (DATEDIFF( CURDATE(),STR_TO_DATE(date_of_birth, '%Y-%m-%d')) / 365) <= 50 THEN 'Below 50'
    ELSE 'Over 50'
   END as age_group, 
   COUNT(customer_id) 

 FROM customer_master 
 GROUP BY age_group;

【问题讨论】:

    标签: mysql date


    【解决方案1】:

    您可以使用CASE 运算符。

    SELECT CASE
             WHEN (DATEDIFF( CURDATE(),date_of_birth) / 365.25) < 40 THEN 'Below 40'
             ELSE 'Over 40'
           END as age_group, 
           COUNT(customer_id) 
    FROM customer_master 
    GROUP BY age_group;
    

    抱歉格式不好,这是我的第一个答案

    【讨论】:

    • 感谢您的回答,它只需要在括号中。如果你纠正这个我可以接受。
    【解决方案2】:

    一种解决方案是在子查询中使用 CASE 级联值:

    select age_group, count(customer_id) as 'count' from
        (select customer_id,
           year(curdate())-year(date_of_birth) as 'age',
           case when (year(curdate())-year(date_of_birth)) < 20, "Below 20"
           when (year(curdate())-year(date_of_birth)) < 30, "Between 20 and 29"
           when (year(curdate())-year(date_of_birth)) < 40, "Between 30 and 39"
           else "40 or Greater" end as 'age_group'
        FROM customer_master) x
    group by age_group
    

    【讨论】:

    • [Err] 1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册以获取正确的语法,以便在第 4 行的 (year(curdate())-year(date_of_birth))
    • 我有几个不应该出现的逗号。编辑删除它们。
    【解决方案3】:
    SELECT 
      (year(curdate())-year(date_of_birth)) div 20 as age_group,
      COUNT(customer_id)
    FROM 
      customer_master
    GROUP BY age_group
    

    这样的事情会在每 20 个中为您提供客户数量。如果您想要不同大小的组,只需更改除以的数量即可。

    假设您希望每个组的大小相同,例如

    1 - 20
    21 - 40
    41 - 60
    ...
    

    如果您想要不同的尺寸,请按照其他人的建议使用 CASE 解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多