布尔条件分组依据,窗口函数

Posted

技术标签:

【中文标题】布尔条件分组依据,窗口函数【英文标题】:Boolean Condition Group By, Window Functions 【发布时间】:2020-05-12 09:11:19 【问题描述】:

我正在尝试根据组中的条件添加新列。 我们可以做类似的事情吗 BOOL() OVER (PARTITION BY id 'D' in val) 这类似于 GROUP BY id 并检查值是否为 'D" val 列

输入:

-------------
| id  | val |
------------|
|  1  |  A  |
|  1  |  B  |
|  1  |  D  |
|  2  |  B  |
|  2  |  C  |
|  2  |  A  |

输出

-------------------
| id  | val | res |
------------|-----|
|  1  |  A  |  1  |
|  1  |  B  |  1  |
|  1  |  D  |  1  |
|  2  |  B  |  0  |
|  2  |  C  |  0  |
|  2  |  A  |  0  |

【问题讨论】:

【参考方案1】:

您没有指定您的 DBMS,但在标准 ANSI SQL 中,您可以使用 filter() 子句:

count(*) filter (where val = 'D') over (partition by id) > 0

【讨论】:

【参考方案2】:

在 Postgres 中,您可以为此使用 bool_or()

select t.*, bool_or(val = 'D') over(partition by id) res
from mytable t

Demo on DB Fiddle

编号 |值 |资源 -: | :-- | :-- 1 |一个 |吨 1 |乙|吨 1 | D |吨 2 |乙| F 2 | C | F 2 |一个 | F

这会给你一个布尔结果。如果你想要它作为一个整数值,那么:

(bool_or(val = 'D') over(partition by id))::int

【讨论】:

以上是关于布尔条件分组依据,窗口函数的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server SUM IF 使用具有多个条件的窗口函数

窗口函数

窗口聚合函数与分组聚合函数的异同

hive关于窗口函数的使用

Flink SQL 分组窗口函数 Group Window 实战

重学SQL窗口函数