簡體   English   中英

如何僅將聚合函數應用於不同的記錄

[英]How to apply aggregate function only on distinct records

我有兩個表, ordersorder_item

orders表:

Id      Total    DeliveryCharge  Status  DeliveryDate
2001    600      120             30      2015-09-01 11:56:32
2002    1500     150             30      2015-09-09 09:56:32
2003    1200     100             30      2015-09-30 08:05:32

order_item表:

Id      OrderTotal   Quantity  
12001   2001         2
12002   2001         1
12003   2002         1
12004   2003         1
12005   2003         1

由於每個訂單可以包含多個產品,因此order_item表可以為單個訂單提供多個記錄。

我想通過查詢獲取結果是

OrderCount  Quantity  OrderTotal DeliveryCharge
3           6         3300       370

我寫了一個查詢

select count(distinct od.Id) as OrderCount,
       sum(oi.Quantity) as Quantity,
       (select sum(ord.OrderTotal) from orders ord
        where ord.DeliveryDate between '2015-09-01' and '2015-10-01' and ord.Status=30 )  as OrderTotal
from orders od
  join Order_items oi on od.Id=oi.orderId
where od.Status=30
  and od.DeliveryDate between '2015-09-01' and '2015-10-01'

結果

OrderCount  Quantity  OrderTotal 
3           6         3300      

但是現在我想要orders表的DeliveryCharge的總和,因此我再次必須為OrderTotal編寫select子查詢

有沒有一種好的方法可以通過單個查詢而不使用多個子查詢來找到它?

將子查詢放在from子句中:

select o.OrderCount, o.OrderTotal, o.OrderDeliveryCharge, oi.quantity
from (select count(*) as OrderCount, sum(Total) as OrderTotal, 
             sum(DeliveryCharge) as OrderDeliveryCharge
      from orders
     ) o cross join
     (select sum(quantity) as quantity
      from order_item
     ) oi;

用這個

SELECT SUM(oi.oc) AS 'OrderCount', SUM(oi.q) AS 'Quantity', SUM(o.total) AS 'OrderTotal', SUM(o.deliverycharge) AS 'DeliveryCharge'
FROM
    orders o INNER JOIN
    (SELECT ordertotal, COUNT(DISTINCT(ordertotal)) AS oc, SUM(quantity) AS q FROM order_item GROUP BY 1) oi ON o.id=oi.ordertotal

暫無
暫無

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

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