sql - 无法设置 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)
有可能完成这项工作吗?
解决方案
子查询:
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;
推荐阅读
- prolog - 有没有更有效的方法在 swi-prolog 中实现这两个功能?
- java - 是否可以捕获 java.lang.reflect.GenericSignatureFormatError?
- sql - SQL 查询通过比较两个差异条件的同一列来生成报告
- javascript - TypeError: ShallowWrapper::renderProp() 只能在自定义组件上调用
- android - 如何在 android SDK 模拟器 (API > 25) 中更改 /system/framework 文件?
- python - 使用 Python Scrapy 抓取优惠券网站
- maven - pom.xml 文件上出现了一个红十字,它显示依赖项中缺少工件
- oxyplot - Oxyplot 中的工具提示位置
- android-recyclerview - 如何检查单击了哪个对象?
- jquery - 如何在追加之前隐藏珍贵的价值