簡體   English   中英

如何在MYSQL中對具有相同值的字段的SUMS求和

[英]How to SUM of SUMS of fields with same value in MYSQL

我有這些表:當KEY3 = X時,我需要用相同的KEY1和KEY2來“求和”所有值

| KEY1 | VALUE1 | KEY2 | VALUE2 | KEY3 |
|   1  |   9    |   2  |   2    |   x  |
|   1  |   10   |   2  |   3    |   x  |
|   2  |   5    |   1  |   8    |   x  |
|   2  |   5    |   1  |   9    |   y  |

從表1那里選擇key1作為k1,選擇key2作為k2 WHERE key3 = x

對於這些查詢的每個結果,我需要執行以下操作:

SELECT 
COALESCE(SUM(case when key1 = k1 then totalamount1 else 0   end),0) + 
COALESCE(SUM(case when key2 = k2 then totalamount2 else 0   end),0) as total
FROM table1
WHERE key3 = x

Y需要這些輸出:

      Total
id 1:  27
id 2:  10 

如何加入這兩個查詢?

謝謝!

最簡單的方法是“取消透視表”:

SELECT
  Key,
  SUM(Value) AS Total
FROM (
  SELECT Key3, Key1 AS Key, Value1 AS Value FROM Table1
  UNION ALL SELECT Key3, Key2, Value2 FROM Table1
) NormTable
WHERE Key3 = 'x'
GROUP BY Key

您也可以將WHERE Key3 = 'x'移到每個聯合查詢中。 這樣會更快,但更容易出錯,因為如果需要不同的Key3值,則需要在每個查詢中進行更改。 您打來的那個。

這是獲得結果的一種方法:

SELECT IF(i.i,t.key1,t.key2) AS `id`
     , SUM(IF(i.i,t.value1,t.value2)) AS `Total`
  FROM table1 t
 CROSS
  JOIN (SELECT 0 AS i UNION ALL SELECT 1) i
 WHERE t.key3 = 'x'
 GROUP
    BY IF(i.i,t.key1,t.key2)

SQL Fiddle演示在這里:http://sqlfiddle.com/#!2/d7599f/1


我使用的“技巧”是通過執行table1與一組恰好包含兩行的交叉連接來獲得兩組行。 這兩個行可以通過條件測試相互區分。

由於ii的值將為10 ,這意味着它將作為IF函數中的條件測試求值為TRUE和FALSE。

我們可以從一組行中提取(key1,value1),並從另一組行中提取(key2,value2),本質上,創建如下結果集:

| i | keyN | valueN | 
| 1 |   1  |   9    | 
| 1 |   1  |   10   | 
| 1 |   2  |   5    | 
| 0 |   2  |   2    | 
| 0 |   2  |   3    | 
| 0 |   1  |   8    |

現在,只需要執行一個SUM(valueN) GROUP BY keyN


上面的查詢可以用(更可移植的)SQL-92樣式重寫:

SELECT CASE WHEN i.i = 1 THEN t.key1 ELSE t.key2 END AS `id`
     , SUM(CASE WHEN i.i = 1 THEN t.value1 ELSE t.value2) AS `Total`
  FROM table1 t
 CROSS
  JOIN (SELECT 0 AS i UNION ALL SELECT 1) i
 WHERE t.key3 = 'x'
 GROUP
    BY CASE WHEN i.i = 1 THEN t.key1 ELSE t.key2 END AS `id`

(對於Oracle,我們需要在別名為i的嵌入式視圖中的每個選擇上添加FROM DUAL 。)


暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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