首页 > 解决方案 > 无法设置 Percent_rank() - 默认为 0.0

问题描述

我正在尝试设置一列,但结果将最终为每行 0.0。如果我在 SELECT 中使用相同的语法(其中的选择部分),结果会正确显示。

UPDATE table1
SET ranking = (SELECT
PERCENT_RANK() OVER(PARTITION BY city ORDER BY sales DESC)
from table1
group by store_id)

有可能完成这项工作吗?

标签: sqlsqlitesql-updatewindow-functions

解决方案


子查询:

SELECT PERCENT_RANK() OVER(PARTITION BY city ORDER BY sales DESC)
from table1
group by store_id

为每个返回 1 行store_id,SQLite 只选择一个并使用表中所有行的该行的值进行更新PERCENT_RANK()

您必须将子查询与table1

UPDATE table1
SET ranking = (
  SELECT pr
  FROM (
    SELECT store_id, 
           PERCENT_RANK() OVER(PARTITION BY city ORDER BY sales DESC) pr
    FROM table1
    GROUP BY store_id
  ) t
  WHERE table1.store_id = t.store_id
);

或者,如果您的 SQLite 版本是 3.33.0,请使用以下UPDATE...FROM...语法:

UPDATE table1 AS t1
SET ranking = t.pr
FROM (
  SELECT store_id, 
         PERCENT_RANK() OVER(PARTITION BY city ORDER BY sales DESC) pr
  FROM table1
  GROUP BY store_id
) t
WHERE t1.store_id = t.store_id; 

推荐阅读