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