我想查询订单表并显示客户ID和所有订单的总数,但订单可以有正数或负数。
select customer_id, SUM(order_total) from orders group by customer_id;
现在我的问题 - 如何在一个SQL查询中实现以下功能:
如果总和是正数,我想按原样显示;如果总和是负数,我只想显示0而不是实际金额。
我正在寻找的是一个可以处理此问题的函数,类似于IFNULL
函数(IFNULL(SUM(order_total),0)
),但不是检查null,而是应该检查否定结果。
伪代码:
IFNEGATIVE(SUM(order_total),0)
标准sql中是否有一种简单的方法(或者特别是在Mysql 5.5中,也可以)。
答案 0 :(得分:11)
SELECT customer_id,
CASE
WHEN SUM(order_total) < 0 THEN 0
ELSE SUM(order_total)
END
FROM orders
GROUP BY customer_id;
检查您的执行计划,但2 SUM
可能会优化为一个SUM
。
答案 1 :(得分:8)
尝试:
select customer_id, GREATEST( SUM(order_total),0) from orders group by customer_id;
答案 2 :(得分:3)
未经测试,但这样的事情应该这样做:
SELECT customer_id , IF( SUM(order_total) > 0, SUM(order_total), 0) AS sum FROM orders GROUP BY customer_id
答案 3 :(得分:1)
如果我理解它只包装 GREATEST
SELECT customer_id, GREATEST(0,SUM(order_total))
FROM orders GROUP BY customer_id;
查看link
答案 4 :(得分:1)
你能否使用CASE声明?
类似的东西:
CASE WHEN [Field] < 0 THEN 0
或者我错过了什么?
答案 5 :(得分:0)
select Id,case when (sum(amount)<0) then 0 else sum(amount) end from tblsum group by Id
答案 6 :(得分:0)
您也可以尝试;
select
(sum(fld) + abs(sum(fld))) / 2
from tbl
答案 7 :(得分:-2)
仅显示正面使用HAVING因此:
select customer_id, SUM(order_total) from orders group by customer_id HAVING SUM(order_total) > 0;
否则使用此处其他地方列出的案例