【问题标题】:Run PERCENT_RANK() and save result to table运行 PERCENT_RANK() 并将结果保存到表中
【发布时间】:2021-02-10 05:22:40
【问题描述】:

我有一张看起来像这样的表

instID    xx     yy    zz
   2       2     9     6
   3      11     5     9
   4      13     3     14

我想对字段 xx、yy、zz 运行 PERCENT_RANK() 查询,然后将它们保存到具有相同 instID 编号的表中。

现在我为每个人运行一个Percent_Rank 查询,但我无法弄清楚如何保存从查询中获得的数据,和/或是否可以分别为每个人进行排名但在同一个查询中?

这是我现在正在运行的简单代码

select 
xx,
yy,
zz,
ROUND(
    PERCENT_RANK() OVER (
        ORDER BY xx desc
    ) 

,2) percentile_rank
FROM table;

【问题讨论】:

  • 我的猜测是,提出一个显示您想要的数据的查询,然后将其粘贴到 CTE 中,并使用该 CTE 的结果插入新表,或更新现有表.
  • 那么您可以为您的 3 列中的每一列重复 percent_rank 吗?然后正如 pmbAustin 所说,使用 CTE 更新/插入表格。不清楚您要在哪里保存它。

标签: sql sql-server tsql window-functions create-table


【解决方案1】:

如果我没听错的话,你可以使用select ... into 语法,并对每一列进行百分比排名:

select xx, yy, zz,
    percent_rank() over(order by xx) xx_pct_rn,
    percent_rank() over(order by yy) yy_pct_rn,
    percent_rank() over(order by zz) zz_pct_rn
into newtable
from mytable

这将创建一个名为 newtable 的新表,其中包含与原始表一样多的行,另外三个列存储三个原始列的百分比排名。

【讨论】:

  • 是的,这个效果很好,但是是否可以将计算添加到具有百分位等级的现有表中?
  • 我的意思是我每次运行代码时都不会创建一个新表
猜你喜欢
  • 2023-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-05
  • 1970-01-01
相关资源
最近更新 更多