我有一個表格數據和狀態的交易。有三種狀態批准,無效和取消。我想這樣的,這將出來把如下查詢:顯示兩種狀態數量的總和
approved cancelled void
$123 $144 $155
其中$ 123 $ 144和$ 155的狀態定義的總量各種交易的總和。
請幫幫我。
我有一個表格數據和狀態的交易。有三種狀態批准,無效和取消。我想這樣的,這將出來把如下查詢:顯示兩種狀態數量的總和
approved cancelled void
$123 $144 $155
其中$ 123 $ 144和$ 155的狀態定義的總量各種交易的總和。
請幫幫我。
一種選擇是使用一個條件表達式內的聚集體,這樣的事情:
SELECT SUM(IF(t.status='approved' ,t.amount,0) AS approved
, SUM(IF(t.status='cancelled',t.amount,0) AS cancelled
, SUM(IF(t.status='void' ,t.amount,0) AS void
FROM mytable t
WHERE ...
注的IF()
函數計算所述第一參數作爲布爾;如果第一個參數的計算結果爲TRUE,則函數返回第二個參數,否則返回第三個參數。
SUM()
是標準的集合函數;在這個例子中,它只是對錶達式進行操作,就像操作任何表達式一樣。
IF()
函數是MySQL特有的。 ANSI標準當量:
SELECT SUM(CASE WHEN t.status='approved' THEN t.amount ELSE 0 END) AS approved
, SUM(CASE WHEN t.status='cancelled' THEN t.amount ELSE 0 END) AS cancelled
, SUM(CASE WHEN t.status='void' THEN t.amount ELSE 0 END) AS AS void
FROM mytable t
WHERE ...
同樣,SUM()
集合體只是操作上的表達,像它總是這樣。
隨訪
Q如果有什麼其他的與其他類型的交易狀態,但我想在一列中顯示的其他狀態的總和?
一個同樣,只使用該值爲TRUE的每一行上表達你想要的量返回值;有時候更方便地將測試反轉,以便返回數額作爲else條件,而不是返回,例如,
SELECT SUM(IF(t.status='approved' ,t.amount,0) AS approved
, SUM(IF(t.status='cancelled',t.amount,0) AS cancelled
, SUM(IF(t.status='void' ,t.amount,0) AS void
, SUM(IF(t.status IN ('approved','cancelled','void'), 0, t.amount) AS others
FROM mytable t
WHERE ...
非常抱歉再次打擾您如果有其他事務處於其他類型的狀態,但我想在一列中顯示其他狀態的總和 – user1140176
您可以使用相同的語法添加另一個結果列,這是所有行的總和('批准','取消','空白')中的t.status – RobP
你有一個表或更好的解釋是一種很難知道你想要什麼 – user3210416
確定我要的是下批准的列總和(金額)所有經批准的交易,下的所有交易取消的取消總和(金額)等等 – user1140176
考慮處理應用程序級別的數據顯示問題。否則,看看構造一個數據透視查詢。 – Strawberry