首页 > 解决方案 > 如何计算具有相同 id 的行的总和?

问题描述

我需要创建一个返回产品最终增益的函数。我的问题是,对于每个需要 10 天以上才能处理的 PRODUCT_ID,我必须将 (days * 0.0001) 添加到产品价格中。许多 ORDER_ID 有不同的 PRODUCT_ID。我想不出在同一个函数中做到这一点的方法。我必须在哪里添加乘法?数据库架构是这样的

在此处输入图像描述

我尝试了双循环并尝试了 SUM,但这些都不起作用。

CREATE OR REPLACE FUNCTION get_gain(orderID NUMBER)
  RETURN NUMBER
  AS
    total_price   NUMBER;
    total_cost    NUMBER;
    gain    NUMBER;

    Cursor cur1 IS
    SELECT SUM(PRICE) AS "Total PRICE"
    FROM ORDERS
    WHERE ORDER_ID=orderID;
    Cursor cur2 IS
    SELECT SUM(COST) AS "Total COST"
    FROM ORDERS
    WHERE ORDER_ID=orderID;

BEGIN
   OPEN cur1;
   FETCH cur1 INTO total_price;
   CLOSE cur1;
   OPEN cur2;
   FETCH cur2 INTO total_cost;
   CLOSE cur2;
   gain := total_price - total_cost;
   RETURN gain;

END;

标签: oracleplsql

解决方案


您可以使用以下方法来构建您的查询。我相信您不需要任何功能来执行此操作

SELECT
  ORDER_ID,
  ...
  CASE WHEN DAYS_TO_PROCESS > 10 THEN
     PRICE + DAYS_TO_PROCESS * 0.0001 
  ELSE
     PRICE
  END AS PRICE
FROM table1
WHERE ...

目前尚不清楚您要达到的目标。请提供更多细节。

这是更新产品价格的功能示例

CREATE OR REPLACE FUNCTION UpdatePrice(orderID NUMBER)
  RETURN NUMBER
  AS
    total_price   NUMBER;
    total_cost    NUMBER;
    gain    NUMBER;
BEGIN
  UPDATE table1 
  SET PRICE = 
    CASE WHEN DAYS_TO_PROCESS > 10 THEN
       PRICE + DAYS_TO_PROCESS * 0.0001 
    ELSE
       PRICE
    END
  WHERE ORDER_ID = p_ORDER_ID;
END;

推荐阅读