如何在 SQL 查询中按不同天数分组?
Posted
技术标签:
【中文标题】如何在 SQL 查询中按不同天数分组?【英文标题】:How to group by number of difference days sin SQL query? 【发布时间】:2021-10-25 16:06:21 【问题描述】:我的查询中有一个最终连接,它连接了 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。
【参考方案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;
【讨论】:
以上是关于如何在 SQL 查询中按不同天数分组?的主要内容,如果未能解决你的问题,请参考以下文章