布尔条件分组依据,Window 函数

Boolean Condition Group By, Window Functions

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

输入:

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

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

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

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

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

Demo on DB Fiddle:

id | val | res
-: | :-- | :--
 1 | A   | t  
 1 | B   | t  
 1 | D   | t  
 2 | B   | f  
 2 | C   | f  
 2 | A   | f  

这给你一个布尔结果。如果您希望它作为整数值,则:

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