如何在主表上加入按天聚合的数据

Posted

技术标签:

【中文标题】如何在主表上加入按天聚合的数据【英文标题】:How to join data aggregated by day on main table 【发布时间】:2021-02-12 13:15:35 【问题描述】:

我希望能够在非聚合表中加入按天聚合的数据。

字段:id、日期

表格:案例

date  id
1/1   31   
1/1   22   
1/1   36   
1/1   44   
1/2   51   
1/2   64 

我的最终结果应该是:

date  id  total_id_per_day
1/1   31   4
1/1   22   4
1/1   36   4
1/1   44   4
1/2   51   2
1/2   64   2

我尝试了以下方法,但没有按预期工作:

with idtotal as (select date, count(distinct id) as total_id_per_day from case group by date)

select c.date, c.id, idtotal.total_id_per_day
from case as c
left join idtotal on idtotal.date = case.date

我该如何进行这项工作?

【问题讨论】:

【参考方案1】:

如果你的 SQL 版本支持解析函数,那么在这里使用COUNT

SELECT date, id, COUNT(id) OVER (PARTITION BY date) total_id_per_day
FROM yourTable
ORDER BY date;

如果您在没有分析函数的情况下遇到困难,请使用连接子查询来查找计数:

SELECT t1.date, t1.id, t2.cnt AS total_id_per_day
FROM yourTable t1
INNER JOIN
(
    SELECT date, COUNT(id) AS cnt
    FROM yourTable
    GROUP BY date
) t2
    ON t2.date = t1.date
ORDER BY
    t1.date;

【讨论】:

谢谢!第一个选项正是我需要的!

以上是关于如何在主表上加入按天聚合的数据的主要内容,如果未能解决你的问题,请参考以下文章

在主表上的数据库触发器中将数据插入临时表

为啥在主表上查询很慢?

仅在主表上作为复合主键

将数据添加到主表上的多个记录的链接表中

如何按天聚合熊猫数据框

如何使用 Exists 语句以及主表上的条件获取匹配记录