SQL Oracle中的减号查询

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL Oracle中的减号查询相关的知识,希望对你有一定的参考价值。

我试图从两个表中减去两个单个float值之间的减法:

第一个是:

select sum (cost) as "total cost" from (SELECT * 
FROM PRODUCT 
LEFT JOIN sell_bill ON sell_bill.PRODUCT_ID=PRODUCT.ID
WHERE (product.cost > sell_bill.PRICE)

它返回240

第二个是:

select sum (price) as "total price" from (SELECT *
FROM PRODUCT 
LEFT JOIN sell_bill ON sell_bill.PRODUCT_ID=PRODUCT.ID
WHERE (product.cost > sell_bill.PRICE)

它返回140

所以这就是我的尝试:

select sum (cost) as "total cost" from (SELECT * 
FROM PRODUCT 
LEFT JOIN sell_bill ON sell_bill.PRODUCT_ID=PRODUCT.ID
WHERE (product.cost > sell_bill.PRICE)
minus 
select sum (price) as "total price" from (SELECT *
FROM PRODUCT 
LEFT JOIN sell_bill ON sell_bill.PRODUCT_ID=PRODUCT.ID
WHERE (product.cost > sell_bill.PRICE)
;

但是它返回了240 ......出了什么问题?

答案

你可以尝试下面 -

SELECT sum (cost)-sum (price) as difference
FROM PRODUCT 
LEFT JOIN sell_bill ON sell_bill.PRODUCT_ID=PRODUCT.ID
WHERE product.cost > sell_bill.PRICE
另一答案

MINUS运算符没有达到预期的效果:它不会减去值,它会对数据集进行操作(返回第一个SELECT语句中未被第二个SELECT语句返回的所有行)。

此外,您不需要使用子查询来计算SUM,例如:SELECT SUM(cost) from (SELECT...);我删除了它。

我想你只想要:

SELECT 
    SUM(cost) - SUM(price)
FROM 
    product 
    LEFT JOIN sell_bill ON sell_bill.product_id = product.id
WHERE product.cost > sell_bill.price

以上是关于SQL Oracle中的减号查询的主要内容,如果未能解决你的问题,请参考以下文章

使用减号 oracle 优化插入查询

sql Oracle代码片段

SQL CASE 语句和减号

SQL - 雪花减号运算符

Microsoft SQL Server 代码片段收集

oracle 中的 sql语句查询