簡體   English   中英

如何在MySQL中按條件使用多個分組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM