如何在Postgresl中的窗口函数中计数(&DISTINCT)? [英] How to "distinct" count in a window function in Postgresl?

查看:10
本文介绍了如何在Postgresl中的窗口函数中计数(&DISTINCT)?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一张简单的表格-

--------------------------------------------------
| srcip | dstip | dstport            
--------------------------------------------------
| X     | A     | 80
--------------------------------------------------
| X     | A     | 443
--------------------------------------------------
| X     | B     | 8080
--------------------------------------------------

我想要这样的输出-

--------------------------------------------------
| srcip | dstip | count            
--------------------------------------------------
| X     | A     | 2
--------------------------------------------------
| X     | B     | 1
--------------------------------------------------

我正尝试在窗口函数中使用COUNT(distinct dstport) OVER(PARTITION BY dstip,dstport) as count,但遇到错误WINDOW definition is not supported

推荐答案

首先,正如您所写的问题,该值始终为"1"(或者可能NULL)。代码正在计算dstport,而您正在按值进行分区。因此,只能有一个。

您可以使用两个级别的窗口函数来完成此操作。以下是一种方法:

select t.*,
       sum( (seqnum = 1)::int ) as count_distinct
from (select . . . ,
             row_number() over (partition by dstip order by dstport) as seqnum
      from . . .
     ) t

这篇关于如何在Postgresl中的窗口函数中计数(&DISTINCT)?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆