【问题标题】:Oracle: How to sum up alias column in OracleOracle:如何总结 Oracle 中的别名列
【发布时间】:2021-02-28 23:37:48
【问题描述】:

我有一个问题:

SELECT od.*, i.name AS item_name, (od.quantity*od.price) AS sub_total
    FROM order_details od
    JOIN items i ON od.item_id = i.item_id
    WHERE order_id = 9

它产生以下结果。

现在,我想总结SUB_TOTAL 列,我希望结果为1300

我尝试了以下代码,但它不起作用。

SELECT od.*, i.name AS item_name, (od.quantity*od.price) AS sub_total, SUM(sub_total) AS total
    FROM order_details od
    JOIN items i ON od.item_id = i.item_id
    WHERE order_id = 9

请帮忙。

【问题讨论】:

    标签: sql oracle sum inner-join aggregate-functions


    【解决方案1】:

    那是一个窗口SUM() - 你不能重复使用列别名,你需要重复表达式,或者使用子查询或 CTE:

    SELECT od.*, i.name AS item_name, (od.quantity * od.price) AS sub_total,
        SUM(od.quantity * od.price) OVER() AS total
    FROM order_details od
    JOIN items i ON od.item_id = i.item_id
    WHERE order_id = 9
    

    您可能需要根据您的实际需要调整窗口SUM()OVER() 子句。上面的查询将在两行都带来1300。您可以使用PARTITION BY 子句将行集划分为组,和/或使用ORDER BY 计算运行总和。

    【讨论】:

    • 谢谢。有用。非常感谢您的解释。
    【解决方案2】:

    使用窗口函数:

    SELECT od.*, i.name AS item_name, (od.quantity*od.price) AS sub_total,
           SUM((od.quantity*od.price) OVER (ORDER BY order_detail_id)
    FROM order_details od JOIn
         items i
         ON od.item_id = i.item_id
    WHERE order_id = 9;
    

    请注意,您不能重复使用别名;您需要重复计算。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-04
      • 2019-08-02
      • 1970-01-01
      相关资源
      最近更新 更多