如何在mysql中统计今年购买过但前两年没有购买过的客户

问题描述 投票:0回答:1

今年但前 2 年未购买的非活跃客户数量(季度)。

到目前为止我已经计算如下。

SELECT x.dept, 
       COUNT(CASE WHEN QUARTER(x.min_cd) = '1' THEN 1 END) AS Q1,
       COUNT(CASE WHEN QUARTER(x.min_cd) = '2' THEN 1 END) AS Q2,
       COUNT(CASE WHEN QUARTER(x.min_cd) = '3' THEN 1 END) AS Q3,
       COUNT(CASE WHEN QUARTER(x.min_cd) = '4' THEN 1 END) AS Q4
FROM (
   SELECT cs.department_id AS dept, MIN(ccals.ci_date) as min_cd
   FROM commision_calculation ccals
   LEFT JOIN customer cs ON cs.id=ccals.cusotmer_id    
   WHERE ccals.ci_date >= DATE_SUB(CURDATE(),INTERVAL 2 YEAR)    
   GROUP BY dept
   AS x
GROUP BY x.dept,QUARTER(x.min_cd)

Dept    Q1  Q2  Q3  Q4
A       2   1   0   5
B       1   2   3   0
C       4   2   1   1
sql mysql mysqli count report
1个回答
0
投票

我已经从 GROUP BY 子句中删除了放错位置的 AS x ,并更正了 GROUP BY 子句以直接使用 cs.department_id

SELECT x.dept, 
       COUNT(CASE WHEN QUARTER(x.min_cd) = '1' THEN 1 END) AS Q1,
       COUNT(CASE WHEN QUARTER(x.min_cd) = '2' THEN 1 END) AS Q2,
       COUNT(CASE WHEN QUARTER(x.min_cd) = '3' THEN 1 END) AS Q3,
       COUNT(CASE WHEN QUARTER(x.min_cd) = '4' THEN 1 END) AS Q4
FROM (
   SELECT cs.department_id AS dept, MIN(ccals.ci_date) as min_cd
   FROM commision_calculation ccals
   LEFT JOIN customer cs ON cs.id = ccals.customer_id    
   WHERE ccals.ci_date >= DATE_SUB(CURDATE(), INTERVAL 2 YEAR)    
   GROUP BY cs.department_id
) AS x
GROUP BY x.dept, QUARTER(x.min_cd);
© www.soinside.com 2019 - 2024. All rights reserved.