如何将聚合函数确定的值设置为列
Posted
技术标签:
【中文标题】如何将聚合函数确定的值设置为列【英文标题】:How to set the Value detemined by aggregate function to a column 【发布时间】:2016-06-24 11:41:43 【问题描述】:我使用 oracle Apex。我创建了一个列 avg 来设置它的值
UPDATE emp
SET avg = SUM(price)
OVER (PARTITION BY id)/COUNT(DISTINCT date) OVER(PARTITION BY id);
我已经使用聚合函数成功生成了我想要的值,但我无法将其设置为列。建议我如何将查询结果设置为列。
【问题讨论】:
UPDATE emp SET avg = SUM(price) OVER (PARTITION BY id)/COUNT(DISTINCT date) OVER(PARTITION BY id) AS Price FROM EMP 试过了。我认为我们不应该使用聚合函数来设置语句。但是我不确定 除了SUM(price) / COUNT(DISTINCT date)
看起来很可疑之外,您不应该存储该值。您正在展示可以从现有数据中获得的价值,因此不要创建冗余。 (并且您不应该使用 SQL 单词作为名称,例如 avg
和 date
。)
我在这里替换了 avg 和 date 变量。我想将数据添加到现有表中,这实际上是我的问题。
【参考方案1】:
通过将所有数据放入 CTE 并根据 ID 更新 Emp 表上的数据
假定脚本:
在甲骨文中:
MERGE INTO EMP U
using (
SELECT ID
, SUM(price) OVER (PARTITION BY id)/COUNT(DISTINCT date) OVER(PARTITION BY id) AS Rnum
FROM EMP
) S
on (u.id = s.id)
when matched then update set U.Avg = S.rnum
在 SQL 服务器中
;WITH number AS (
SELECT ID
, SUM(price) OVER (PARTITION BY id)/COUNT(DISTINCT date) OVER(PARTITION BY id) AS Avg
FROM EMP
)
UPDATE t
SET t.Avg = r.Avg
FROM Emp t
JOIN number r ON t.ID = r.ID;
【讨论】:
你确定 Oracle 支持吗?以上是关于如何将聚合函数确定的值设置为列的主要内容,如果未能解决你的问题,请参考以下文章