Oracle:如何总结 Oracle 中的别名列

Posted

技术标签:

【中文标题】Oracle:如何总结 Oracle 中的别名列【英文标题】:Oracle: How to sum up alias column in 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

请帮忙。

【问题讨论】:

【参考方案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;

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

【讨论】:

以上是关于Oracle:如何总结 Oracle 中的别名列的主要内容,如果未能解决你的问题,请参考以下文章

获取Oracle数据库不同模式中的表名列表[重复]

从信息模式中获取oracle中的表名列表[重复]

如何通过JDBC连接Oracle数据库获取表名列表

Oracle:从存储过程重命名列标题

如何在 Oracle PL/SQL 中动态地从行参数中获取命名列?

如何在 Oracle SQL Developer 的存储过程中将表名列表作为参数传递?如何使用 PLSQL VARRAY 或嵌套表?