Минус запрос в SQL Oracle - PullRequest
0 голосов
/ 27 декабря 2018

Я пытался вычесть два значения одного 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... В чем дело ?

Ответы [ 2 ]

0 голосов
/ 27 декабря 2018

Оператор 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
0 голосов
/ 27 декабря 2018

Вы можете попробовать ниже -

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...