布尔条件分组依据,窗口函数
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 使用具有多个条件的窗口函数