Vertica SQL - 将排名号转换为自己的列

Posted

技术标签:

【中文标题】Vertica SQL - 将排名号转换为自己的列【英文标题】:Vertica SQL - Converting rank number to own column 【发布时间】:2020-10-09 13:21:49 【问题描述】:

我有以下数据(示例)在 CTE 表中排名;

我想从我的主查询中为每个等级创建一个带有值的新列;每个 ID 只保留一行。

我可以让它每个 ID 有 3 行,用空值填充空白,但找不到每个 ID 有 1 行的解决方案。

谢谢

【问题讨论】:

【参考方案1】:

我认为您正在寻找类似的东西

with t_cte as (
    select id, value, row_number() over(partition by id order by value) rn
    from mytable)
select ID, max(case when rn=1 then [Value] else 0 end) Rank1,
           max(case when rn=2 then [Value] else 0 end) Rank2,
           max(case when rn=3 then [Value] else 0 end) Rank3
from t_cte
group by ID;

【讨论】:

【参考方案2】:

我想你想要条件聚合:

select
    id,
    max(case when rn = 1 then value end) value1,
    max(case when rn = 2 then value end) value2,
    max(case when rn = 3 then value end) value3
from (
    select id, value, row_number() over(partition by id order by value) rn
    from mytable
) t
group by id

【讨论】:

以上是关于Vertica SQL - 将排名号转换为自己的列的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server - 如何将 RANK 函数插入到已按排名顺序排序的行中?

在 SQL Server 中使用 Dense_Rank 对具有排名的列进行排名组合

T-SQL -- 将逗号分隔的列转换为多列

如何在 vertica 中获取最后发布的序列 ID?

使用 unpivot 将未知数量的列转换为行的动态 SQL 查询

在 Spark SQL 中将 long 类型的列转换为 calendarinterval 类型