Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Count()超过()有重复记录_Sql - Fatal编程技术网

Sql Count()超过()有重复记录

Sql Count()超过()有重复记录,sql,Sql,我经常使用sum()over()来计算累积值,但今天我尝试了count()over(),结果出乎我的意料,有人能解释一下为什么结果在同一天有重复记录吗 我知道通常的方法是按日期对组进行计数(不同的I’d),然后对(按日期排序)进行求和(),只是好奇“按日期排序计数(id)”的结果 结果将是同一天的重复记录。因为外部查询没有过滤或聚合内部查询的结果。它返回相同数量的行 您需要聚合: select pre.date, count(*) as cnt_on_date, sum(count

我经常使用sum()over()来计算累积值,但今天我尝试了count()over(),结果出乎我的意料,有人能解释一下为什么结果在同一天有重复记录吗

我知道通常的方法是按日期对组进行计数(不同的I’d),然后对(按日期排序)进行求和(),只是好奇“按日期排序计数(id)”的结果


结果将是同一天的重复记录。

因为外部查询没有过滤或聚合内部查询的结果。它返回相同数量的行

您需要聚合:

select pre.date, count(*) as cnt_on_date,
       sum(count(*)) over (order by pre.date) as running_count
from (select distinct person_id, date from events) pre
group by pre.date;

除了想到的
行数()
之外,几乎所有的分析函数都不区分
order by
子句中相同列值的关系。在一些文档中直接说明:

如果使用
RANGE
关键字指定逻辑窗口,则函数将为每一行返回相同的结果

默认情况下,如果提供了
ORDER By
,则框架由从分区开始到当前行的所有行组成,加上根据
ORDER By
子句等于当前行的任何后续行

使用“ORDER BY”:默认帧包括从分区开始到当前行的行,包括当前行的所有对等行(根据
ORDER BY
子句,行等于当前行)


但一般来说,在分析子句中添加
ORDER BY
,会隐式地将窗口规范设置为在无界的前一行和当前行之间的
范围
。当对定义窗口中的每一行进行窗口计算时,将默认设置为
范围
行,其值与
ORDER BY
列相同e进入同一个窗口,并将产生相同的结果。因此,要有一个真正的运行总数,在分析子句的
部分的
ORDER BY
中应该有
行或更多详细列。不支持windowing子句的函数是此规则的例外,但有时它没有直接记录,所以我不会尝试列出可以用作聚合的函数通常也不例外,它们产生相同的值。

我明白了!非常感谢:)感谢您的补充:)
select pre.date, count(*) as cnt_on_date,
       sum(count(*)) over (order by pre.date) as running_count
from (select distinct person_id, date from events) pre
group by pre.date;