我有一个customer_master表。在该表中,我有两列名为customer_id和date_of_birth。
我想要的是由他们的年龄范围得到客户群的数量。像这样的东西。
到目前为止,这是我可以尝试的唯一查询。
选择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;
答案 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解决方案。