如何将算术和与 SQL 中的分析函数结合起来进行运行

Posted

技术标签:

【中文标题】如何将算术和与 SQL 中的分析函数结合起来进行运行【英文标题】:How to combine an arithmetic sum with an analytic function in SQL for a running 【发布时间】:2020-12-06 12:31:57 【问题描述】:

我正在尝试从看起来像这样的普通 SQL 表中的两个计数结果(如下面的 SQL 摘录中所示)计算运行百分比:

我的想法是这样的:

    SELECT week(beginning),
(select count(enquired_at) from TABLE) / (select count(*) from TABLE) * 100 OVER (partition by beginning order by beginning desc)

我想要一个如下所示的结果集:

人们将如何进行这种算术计算并使其从第 1 周开始累积计算?

谢谢!

【问题讨论】:

您的描述不清楚。请显示您想要的结果并明确地解释逻辑(“两次计数的结果”是模糊的)。同时标记您正在使用的数据库。 谢谢 Gordon - 我已经编辑了我的帖子以尝试澄清。 【参考方案1】:

根据您的查询,您似乎想要运行计数 enquired_at 不为空的次数。如果是这样:

select t.*,
       ( count(enquired_at) over (order by beginning) * 1.0 /
         count(*) over (order by beginning)
       ) as ratio
from t;

或者更简单地说:

select t.*,
       avg(case when enquired_at is not null then 1.0 else 0 end) over (order by beginning) as ratio
from t

编辑:

您可以将其放入聚合查询中:

select week(beginning), 
       ( sum(count(enquired_at)) over (order by min(beginning)) * 1.0 /
         sum(count(*)) over (order by min(beginning))
       ) as ratio
from t
group by week(beginning);

【讨论】:

以上是关于如何将算术和与 SQL 中的分析函数结合起来进行运行的主要内容,如果未能解决你的问题,请参考以下文章

SQL ORACLE将两个表与htf(超文本函数)结合起来

我可以将 PIVOT 与 Microsoft SQL Server 中的内部联接结合起来吗?

Sql中的WHERE,结合两个快速条件会成倍增加成本

如何将 Unix 纪元时间戳与 SQL 中的 DATE 进行比较?

结合实例来分析SQL的窗口函数

将分析函数与汇总相结合