簡體   English   中英

結合兩個查詢 Oracle SQL

[英]Combining two queries Oracle SQL

我正在嘗試結合我的兩個單獨工作的查詢。 但我堅持試圖讓他們一起工作,並帶來預期的結果。 這兩個查詢是:

select clientid, sum(fee) as "Total Spent"
from   bookings
group by clientid;

select l.clientid, sum(m.price * l.quantity) as "Total Spent"
from   lineitems l
       join merchandise m on m.merchid = l.merchid
group by l.clientid;

因此,最終目標是結合每個客戶在預訂和購買方面花費的金額。 即客戶 ID 12 在預訂上花費了 450 美元,在產品上花費了 85 美元; 所以總計為 535 美元。

數據集是這樣的:

預訂表

+----------+-------+------------+----------+-----------+---------+------------+
| ClientId | Tour  | EventMonth | EventDay | EventYear | Payment | DateBooked |
+----------+-------+------------+----------+-----------+---------+------------+
|       12 | South | Feb        |       20 |      2016 |     225 | 19/02/2016 |
|       12 | West  | Mar        |        5 |      2016 |     225 | 3/03/2016  |
+----------+-------+------------+----------+-----------+---------+------------+

LineItems 表

+----------+-------+------------+----------+-----------+---------+-----+
| ClientID | Tour  | EventMonth | EventDay | EventYear | MerchId | Qty |
+----------+-------+------------+----------+-----------+---------+-----+
|       12 | South | Feb        |       20 |      2016 |      20 |   1 |
+----------+-------+------------+----------+-----------+---------+-----+

商品表

+---------+----------+------------+-------+
| MerchID | Category | ProdName   | Price | 
+---------+----------+------------+-------+
|      20 | A        | Highway    |    85 |    
+---------+----------+------------+-------+

任何幫助將不勝感激

您可以使用join

SELECT b.*, m.*, b.totalspent + c.totalspent
FROM (SELECT CLIENTID, SUM(FEE) AS TotalSpent
      FROM BOOKINGS2017
      GROUP BY CLIENTID
     ) b JOIN
     (SELECT L.CLIENTID, SUM(M.PRICE * L.QUANTITY) AS TotalSpent
      FROM LINEITEM2017 L JOIN
           MERCHANDISE2017 M
           ON L.MERCHID = M.MERCHID
      GROUP BY L.CLIENTID
    ) m
    USING (CLIENTID);

如果表具有不同的客戶端集,您可能需要外連接。

這與 Gordon 的答案基本相同,但您的樣本數據內聯和總計:

-- Your sample data:
with bookings (clientid, tour, eventmonth, eventday, eventyear, payment, datebooked ) as
     ( select 12, 'South', 'Feb', 20, 2016, 225, date '2016-02-19' from dual union all
       select 12, 'West',  'Mar', 5,  2016, 225, date '2016-03-03' from dual union all
       select  2, 'West',  'Mar', 5,  2016, 225, date '2016-03-03' from dual union all
       select  2, 'West',  'Mar', 6,  2017, 225, date '2016-03-03' from dual union all
       select  2, 'West',  'Mar', 7,  2018, 225, date '2016-03-03' from dual )
   , lineitems (clientid, tour, eventmonth, eventday, eventyear, merchid, quantity) as
     ( select 12, 'South', 'Feb', 20, 2016, 20, 1 from dual )
   , merchandise (merchid, category, prodname, price) as
     ( select 20, 'A', 'Highway', 85 from dual )
--
-- Actual query starts here
--
select b.clientid
     , bookings_total
     , coalesce(merchandise_total,0) as merchandise_total
     , bookings_total + coalesce(merchandise_total,0) as grand_total
from   ( select clientid, sum(payment) as bookings_total
         from   bookings
         group by clientid ) b
       left join
        ( select l.clientid, sum(l.quantity * m.price) as merchandise_total
          from   lineitems l
                 join merchandise m on m.merchid = l.merchid
          group by clientid ) lm
        on  lm.clientid = b.clientid;


CLIENTID BOOKINGS_TOTAL MERCHANDISE_TOTAL GRAND_TOTAL
-------- -------------- ----------------- -----------
      12            450                85         535
       2            675                 0         675

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM