[英]SQL aggregation query for SUM, but only allow positive sums (otherwise 0)
我想查詢一個訂單表並顯示客戶 ID 和他所有訂單的總數,但是訂單總數可以是正數或負數。
select customer_id, SUM(order_total) from orders group by customer_id;
現在我的問題 - 如何在一個 sql 查詢中實現以下目標:
如果總和是正數,我想按原樣顯示; 如果總和為負,我只想顯示 0 而不是實際金額。
我正在尋找的是可以處理此問題的 function ,類似於IFNULL
function ( IFNULL(SUM(order_total),0)
),但不是檢查 Z37A62596648DFFE299A ,而是檢查結果是否為負。
偽代碼:
IFNEGATIVE(SUM(order_total),0)
在標准 sql 中是否有一種簡單的方法(或者特別是在 Mysql 5.5 中,也可以)。
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
。
嘗試:
select customer_id, GREATEST( SUM(order_total),0) from orders group by customer_id;
未經測試,但應該這樣做:
SELECT customer_id , IF( SUM(order_total) > 0, SUM(order_total), 0) AS sum FROM orders GROUP BY customer_id
如果我理解它只用GREATEST包裹它
SELECT customer_id, GREATEST(0,SUM(order_total))
FROM orders GROUP BY customer_id;
看鏈接
你能不使用 CASE 語句嗎?
就像是:
CASE WHEN [Field] < 0 THEN 0
還是我錯過了什么?
select Id,case when (sum(amount)<0) then 0 else sum(amount) end from tblsum group by Id
你也可以試試;
select
(sum(fld) + abs(sum(fld))) / 2
from tbl
僅顯示正面使用 HAVING :
select customer_id, SUM(order_total) from orders group by customer_id HAVING SUM(order_total) > 0;
否則這里其他地方列出的用例
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.