如何在mysql中按条件使用多个组

时间:2016-04-18 15:40:11

标签: mysql date

我有一个customer_master表。在该表中,我有两列名为customer_id和date_of_birth。
我想要的是由他们的年龄范围得到客户群的数量。像这样的东西。

enter image description here

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

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


在每个人的帮助下,我找到了一个完美的答案。

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;

3 个答案:

答案 0 :(得分:4)

您可以使用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;

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

答案 1 :(得分:1)

一种解决方案是在子查询中使用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

答案 2 :(得分:0)

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解决方案。

相关问题