繁体   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