【问题标题】: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 单词作为名称,例如 avgdate。)
  • 我在这里替换了 avg 和 date 变量。我想将数据添加到现有表中,这实际上是我的问题。

标签: sql oracle sql-update oracle-apex window-functions


【解决方案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 支持吗?
猜你喜欢
  • 2016-06-27
  • 2016-04-17
  • 2017-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多