【问题标题】:Cannot set Percent_rank() - defaults to 0.0无法设置 Percent_rank() - 默认为 0.0
【发布时间】:2021-11-30 17:47:03
【问题描述】:

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

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

有没有可能实现这个功能?

【问题讨论】:

    标签: sql sqlite sql-update window-functions


    【解决方案1】:

    子查询:

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

    为每个 store_id 返回 1 行,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; 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-23
      • 2016-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多