[英]How to use multiple group by conditions in mysql
我有一個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;
您可以使用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;
對不起,格式不好,這是我的第一個答案
一種解決方案是在子查詢中對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
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解決方案,請使用其他建議的尺寸。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.