簡體   English   中英

當A,B相等時,SQL查詢到組/ SUM列C,D

[英]SQL Query to Group/SUM Columns C, D, when A, B are equal

我有一個有4列的MySQL表,我們稱之為C1,C2,C3和C4。

在這個數據中,我有一個這樣的數據集:

C1,C2,C3,C4
A,B,12,24
C,D,23,13
A,D,19,15
B,C,15,15
A,C,21,9
B,D,19,2
B,A,8,19
D,C,29,1

我需要獲得如下輸出:

A,71
B,66
D,59
C,48

我試圖編寫一個查詢,但是當兩個其他字段相等並對它們進行分組/排序時,我似乎無法理解如何對兩個字段進行求和。

SELECT C1, SUM(C3,C4) AS Total
WHERE C1 = C2
GROUP BY C1
ORDER BY C1 Desc;

這返回一個空集,我知道為什么,因為C1和C2在同一行不相等,但似乎無法弄清楚下一步該做什么。

第一個解決方案(MySql 8.0):

WITH d AS (
  SELECT DISTINCT C1 AS name FROM tablename
  UNION
  SELECT DISTINCT C2 AS name FROM tablename
)

SELECT tt.name, SUM(tt.value) AS total FROM (
  SELECT 
    d.name,
    CASE WHEN t.C1 = d.name THEN C3 ELSE 0 END + CASE WHEN t.C2 = d.name THEN C4 ELSE 0 END AS value
  FROM d
  INNER JOIN tablename AS t 
  ON t.C1 = d.name OR t.C2 = d.name 
) AS tt
GROUP BY name;

演示

第二個解決方案(MySql 5.7):

SELECT tt.name, SUM(tt.value) AS total FROM (
SELECT 
  d.name,
  CASE WHEN t.C1 = d.name THEN C3 ELSE 0 END + CASE WHEN t.C2 = d.name THEN C4 ELSE 0 END AS value
FROM (
  SELECT DISTINCT C1 AS name FROM tablename
  UNION
  SELECT DISTINCT C2 AS name FROM tablename
) AS  d
INNER JOIN tablename AS t 
ON t.C1 = d.name OR t.C2 = d.name 
) AS tt
GROUP BY name;

演示

我會這樣做:

select col, sum(val)
from ((select c1 as col, c3 as val from t
      ) union all
      (select c2, c4 from t
      )
     ) cc
group by col;

對於您提供的數據,這似乎是最簡單的方法。 與使用or處於join條件的方法相比,這應該具有更好的性能。

暫無
暫無

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

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