Postgres具有窗口函数的不同case语句

时间:2014-07-03 11:59:30

标签: sql postgresql case distinct-values

我正在寻找一个case语句,它将为我列出的每个唯一ID返回一次数字1,如果ID与上面的ID相同则返回0。该列是一个文本列,当前具有“N”或“Y”。

以下是我的数据的示例。我想尽量缩短它,因为这将在其他SQL中使用。

SQL:select case when Value = 'Y' then 1 else 0 end

返回:

ID      Value
48719   Y      -- returns 1
48719   Y      -- returns 1
48719   Y      -- returns 1 
55555   Y      -- returns 1

我想看到什么。

ID      Value
48719   Y      -- return 1
48719   Y      -- return 0
48719   Y      -- return 0
55555   Y      -- return 1

修改

这也是一种可能的情况。对于第一个ID,我想让三行中的任何一行返回1,但是其他两行显示0.由于case语句将为第一行返回0,我可以让它只选择一个1对于具有该ID的所有行。

ID      Value
48719   N      -- returns 1
48719   Y      -- returns 0
48719   Y      -- returns 0 
55555   Y      -- returns 1

1 个答案:

答案 0 :(得分:0)

select
    id, value,
    (
        row_number() over(partition by id) = 1
    )::integer as returned_value
from t