【问题标题】:How to group by number of difference days sin SQL query?如何在 SQL 查询中按不同天数分组?
【发布时间】:2023-03-09 08:47:02
【问题描述】:

我的查询中有一个最终连接,它连接了 2 个表 t1 和 t2,

select count(t1.customerID) as count, DATEDIFF(day,t2.action_date,min(t1.ordered_date)) as diff_date 
inner join t2
on t1.EMAIL = t2.EMAIL and t1.CATEGORY_ID = t2.CATEGORY_ID  
inner join product on prod.CATEGORY_ID= t1.CATEGORY_ID
where t2.action_date <= t1.ordered_date
group by t2.action_date,t1.CATEGORY_ID

我得到如下结果

Count    diff_date
100        0
222        0
300        0
20         1
40         1

我想要的是得到这样的东西

Count      difff_date
622          0
60           1
and so on...

我不确定如何获得这样的结果? 谁能帮忙?

【问题讨论】:

  • 考虑使用其他字段名称而不是 count。这是一个 SQL 关键字,在任何编程语言中,仅按预期使用它是一种很好的做法。
  • 你确定你使用的是MySql吗?代码似乎是 SQL Server。

标签: mysql sql group-by count sum


【解决方案1】:

您需要另一个级别的聚合:

SELECT SUM(count) count, diff_date
FROM (
  SELECT COUNT(t1.customerID) count, DATEDIFF(day, t2.action_date, min(t1.ordered_date)) diff_date 
  FROM t1
  INNER JOIN t2 ON t1.EMAIL = t2.EMAIL AND t1.CATEGORY_ID = t2.CATEGORY_ID  
  INNER JOIN product p ON p.CATEGORY_ID = t1.CATEGORY_ID
  WHERE t2.action_date <= t1.ordered_date
  GROUP BY t2.action_date, t1.CATEGORY_ID
) t
GROUP BY diff_date;

或者,使用SUM()窗口函数:

SELECT DISTINCT 
       SUM(COUNT(t1.customerID)) OVER (PARTITION BY DATEDIFF(day, t2.action_date, min(t1.ordered_date))) count, 
       DATEDIFF(day, t2.action_date, min(t1.ordered_date)) diff_date 
FROM t1
INNER JOIN t2 ON t1.EMAIL = t2.EMAIL and t1.CATEGORY_ID = t2.CATEGORY_ID  
INNER JOIN product p ON p.CATEGORY_ID = t1.CATEGORY_ID
WHERE t2.action_date <= t1.ordered_date
GROUP BY t2.action_date, t1.CATEGORY_ID;

【讨论】:

    猜你喜欢
    • 2010-12-12
    • 2013-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多