Oracle11g 获取(销售总额)减去(退款总额)以计算SQL oracle 11g中的利润

Oracle11g 获取(销售总额)减去(退款总额)以计算SQL oracle 11g中的利润,oracle11g,Oracle11g,我正在做我的数据库任务,航空公司数据库 所以,我需要计算每个航班的利润 查询1每个航班的付款金额之和: SELECT f.flight_id , SUM(r.payment_amount) FROM flight_schedule f , reservation r WHERE r.flight_id = f.flight_id GROUP BY f.flight_id ORDER BY

我正在做我的数据库任务,航空公司数据库

所以,我需要计算每个航班的利润

查询1每个航班的付款金额之和:

SELECT
         f.flight_id
       , SUM(r.payment_amount)
FROM
         flight_schedule f
       , reservation     r
WHERE
         r.flight_id = f.flight_id
GROUP BY
         f.flight_id
ORDER BY
         f.flight_id
;
SELECT
         f.flight_id
       , SUM(e.refund_amount)
FROM
         refund          e
       , flight_schedule f
       , reservation     r
WHERE
         r.flight_id          = f.flight_id
         AND e.reservation_id = r.reservation_id
GROUP BY
         f.flight_id
ORDER BY
         f.flight_id
;
查询1将返回:

F0001              2000
F0002              2000
F0003              2000
F0004              2000
F0005              1000
F0001               50
F0002               50
F0003               50
F0004               50
F0005              100
查询2各航班退款金额之和:

SELECT
         f.flight_id
       , SUM(r.payment_amount)
FROM
         flight_schedule f
       , reservation     r
WHERE
         r.flight_id = f.flight_id
GROUP BY
         f.flight_id
ORDER BY
         f.flight_id
;
SELECT
         f.flight_id
       , SUM(e.refund_amount)
FROM
         refund          e
       , flight_schedule f
       , reservation     r
WHERE
         r.flight_id          = f.flight_id
         AND e.reservation_id = r.reservation_id
GROUP BY
         f.flight_id
ORDER BY
         f.flight_id
;
查询2将返回:

F0001              2000
F0002              2000
F0003              2000
F0004              2000
F0005              1000
F0001               50
F0002               50
F0003               50
F0004               50
F0005              100
所以我想得到每个航班的利润,查询1返回付款金额减去查询2返回退款金额

这是我的预期输出

F0001             1950
F0002             1950
F0003             1950
F0004             1950
F0005              900
我尝试使用减号,但出现错误:

SP2-0042: unknown command "MINUS" - rest of line ignored.
我还尝试将它们结合起来:

SELECT
         f.flight_id
       , SUM(r.payment_amount) - SUM(e.refund_amount)
FROM
         refund          e
       , flight_schedule f
       , reservation     r
WHERE
         r.flight_id          = f.flight_id
         AND e.reservation_id = r.reservation_id
GROUP BY
         f.flight_id
ORDER BY
         f.flight_id
;
但是我没有得到我想要的结果

这是我的ERD: 和在您的加入中,要求退款。+表示接受数据,即使没有退款匹配

SELECT FLIGHT_ID, payX - payY
FROM
(
    SELECT
             f.flight_id
           , SUM(r.payment_amount) payX, SUM(e.refund_amount) payY
    FROM
             refund          e
           , flight_schedule f
           , reservation     r
    WHERE
             r.flight_id          = f.flight_id
             AND e.reservation_id(+) = r.reservation_id
    GROUP BY
             f.flight_id
)
ORDER BY
    flight_id
    ;

负是完全不同的东西。向您展示数据集也很有用。我假设可以有零或更多的付款金额和零或更多的退款金额。上一次查询返回了什么?您是否只获取了退款航班的数据?是的,某些航班没有退款erd很有用。提供输入表数据也会很有用,这样故障诊断人员就可以将其离线测试。看看sqlfiddle.com,作为一种帮助解决这个问题的方式。哦,对不起,我下次提问时会提供这个。啊。可能一点也不退款。好的。很可能您的最后一个查询也可以用+进行修复。你需要仔细阅读内部/外部/自然/完全连接。更喜欢ANSI样式的连接。我很高兴它对您有效。这不是编写此查询的理想方式。始终使用显式连接表示法,并将连接逻辑放入ON子句中。