SQL: 为分组变量创建 if 条件

SQL: create if condition for grouped variables

我有一个包含 4 列的 table,需要创建一个新列,它表示如果下一年的季度至少存在一个数据 ='colour',那么对于这个季度的所有值更改为“颜色”。怎么做?

您可以使用 window 函数:

select t.*,
    min(data) over(partition by year, quarter) as new_column
from mytable t

如果给定季度有任何 'no',则 new_column 将对该季度的所有行取值 'no'。这是有效的,因为字符串,'no' < 'yes'.

您可以使用条件并获取每个季度的 no 计数,如下所示:

select t.*, 
       case when count(case when data = 'no' then 1 end) 
                  over (partition by year, quarter) > 0 
            then 'nocolour' 
            else data 
       end as new_column
from your_table t

假设您的意思是“有 data = 'yes' 下一个季度 并且您想要更新 table,您可以使用:

update t
    set newcolumn = (case when next_max_data = 'yes' then 'colour' else 'no colour')
    from t join
         (select year, quarter, 
                 lead(max(data)) over (order by year, quarter) as next_max_data
          from t
          group by year, quarter
         ) tt
         on t.year = tt.year and t.quater = tt.quarter;

如果您想要一年后的季度,您可以在子查询中使用 lead(max(data), 4)