簡體   English   中英

SQL Sum()-字段中的0(排除聚合中的行)?

[英]SQL Sum() - 0 in field excluding row from aggregation?

考慮以下查詢:

$query = "
SELECT a_orders.id, a_orders.billing,
   SUM(a_order_rows.quant_refunded*a_order_rows.price*((100-a_orders.discount)*.01)) as refund_total,
   SUM(a_order_rows.quant*a_order_rows.price*((100-a_orders.discount)*.01)) as order_total 
FROM a_order_rows JOIN a_orders 
ON a_order_rows.order_id = a_orders.id 
WHERE a_order_rows.quant_refunded > 0 
GROUP BY a_orders.id, a_orders.billing 
ORDER BY a_orders.id DESC 
LIMIT 50";

SUM()的兩種用法試圖匯總訂單總額和已退款的總額。 當quant_refunded字段不為0時,它們可以正確顯示出來...例如,以該數據(為簡單起見,假設主行,唯一行除外,假設每一行都是唯一的項,則不包括主鍵,item_id):

Table: a_order_rows
Fields: order_id, quant, quant_refunded
1, 1, 1
1, 2, 1
2, 1, 1
2, 1, 0

在“順序1”的情況下,這兩個聚合是不同的,並且行為符合預期。 但是對於“第2階”來說,這兩個數字是相同的-這兩個數字都是我期望的return_total。 看來quantum_refunded中具有“ 0”的行已從order_total聚合中排除。

希望對此有足夠的解釋。 如果您需要更多信息,請告訴我,我會進行修改。 謝謝!

$query = "
SELECT a_orders.id, a_orders.billing,
   SUM(a_order_rows.quant_refunded*a_order_rows.price*((100-a_orders.discount)*.01)) as refund_total,
   SUM(a_order_rows.quant*a_order_rows.price*((100-a_orders.discount)*.01)) as order_total 
FROM a_order_rows JOIN a_orders 
  ON a_order_rows.order_id = a_orders.id 
GROUP BY a_orders.id, a_orders.billing 
HAVING MAX(a_order_rows.quant_refunded) > 0 
ORDER BY a_orders.id DESC 
LIMIT 50";

將其更改為HAVING子句。 如果任何quant_refunded行> 0,則HAVING MAX將保留它。

暫無
暫無

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

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