[英]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.