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)
。
我有一个包含 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)
。