![](/img/trans.png)
[英]SQL: How to use DISTINCT on a foreign key without using it in an aggregate function
[英]How to apply aggregate function only on distinct records
我有兩個表, orders
和order_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.