Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Oracle:如何汇总Oracle中的别名列_Sql_Oracle_Sum_Inner Join_Aggregate Functions - Fatal编程技术网

Sql Oracle:如何汇总Oracle中的别名列

Sql Oracle:如何汇总Oracle中的别名列,sql,oracle,sum,inner-join,aggregate-functions,Sql,Oracle,Sum,Inner Join,Aggregate Functions,我有一个问题: 选择od.*,即:名称作为项目名称,(od.数量*od.价格)作为小计 从订单详细信息od 在od.item\u id=i.item\u id上连接项目i 其中order_id=9 它产生以下结果。 现在,我想总结一下SUB_TOTAL列,结果是1300 我试过下面的代码,但不起作用 选择od.*,即:名称作为项目名称,(od.数量*od.价格)作为小计,总和(小计)作为总计 从订单详细信息od 在od.item\u id=i.item\u id上连接项目i 其中order_

我有一个问题:

选择od.*,即:名称作为项目名称,(od.数量*od.价格)作为小计
从订单详细信息od
在od.item\u id=i.item\u id上连接项目i
其中order_id=9
它产生以下结果。

现在,我想总结一下
SUB_TOTAL
列,结果是
1300

我试过下面的代码,但不起作用

选择od.*,即:名称作为项目名称,(od.数量*od.价格)作为小计,总和(小计)作为总计
从订单详细信息od
在od.item\u id=i.item\u id上连接项目i
其中order_id=9
请提供帮助。

这是一个窗口
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
计算运行总和。

使用窗口函数:

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;

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

谢谢。它起作用了。非常感谢你的解释。