sql - 如何在Postgresql的窗口函数中计数 "distinct"?

标签 sql postgresql window-functions

我有一个简单的表格 -

--------------------------------------------------
| 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

关于sql - 如何在Postgresql的窗口函数中计数 "distinct"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48677356/

相关文章:

php - 按 id DESC 排序

c# - 如何执行 ALTER TABLE 查询?

sql - Derby DB最后x行平均值

sql - 通过将一列中的值引用到另一列来汇总记录

sql - 选择具有特定标准的一组特定客户

postgresql - 将总计分组匹配到总计的好方法是什么

sql - 一起使用 INSERT 和 WITH 语句时出错

ruby-on-rails - Rails 5 - 如何将 Controller 中整个 jsonb postgres 列的参数列入白名单?

sql - Spark SQL 复杂条件窗口函数

sql - 窗口功能的默认窗口框架是什么