簡體   English   中英

SQL 對 SUM 的聚合查詢,但只允許正和(否則為 0)

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

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