根据列值对从1到N的行进行编号

  • 本文关键字:编号 sql presto
  • 更新时间 :
  • 英文 :


样本:

id  value  
1   a  
1   b  
1   c  
1   d  
1   a  
1   b  
1   d  
1   a  

预期结果:

id  value   outcome  
1   a   1  
1   b   1  
1   c   1  
1   d   1  
1   a   2  
1   b   2  
1   d   2  
1   a   3  

因此,基本的想法是,我需要根据值列对我所拥有的行进行编号——每当它达到"0"时;d";,计数重新开始。不确定我会用哪种窗口功能来实现这一点,所以任何帮助都将不胜感激!提前感谢!

使用按value或按idvalue分区的row_number窗口函数(基于所需输出):

-- sample data
with dataset(id, value) as(
values (1, 'a'),
(1, 'b'),
(1, 'c'),
(1, 'd'),
(1, 'a'),
(1, 'b'),
(1, 'd'),
(1, 'a')
)
-- query
select *,
row_number() over (partition by id, value) -- or (partition by value)
from dataset;

注意,如果没有允许";天然的";对于over子句(即over (partition by id, value order by some_column_like_timestamp))的排序,则不能保证查询之间的实际顺序(如果在同一分区中存在具有不同值的其他列,则可以观察到它)。

使用row_number给它们一个唯一的数字,然后按row_number和value排序。

select
*,
row_number() over ( partition by (val) ) as rn
from stuff
order by rn, val;

演示

相关内容

  • 没有找到相关文章

最新更新