2017-03-19 5 views
0

Ich versuche, eine MySQL-Abfrage zu schreiben, die den folgenden:MySQL Query-Zeile/Spalte Unterschied

Ich habe eine Tabelle, die wie diese

Id t 
----------- 
1  1 
2  4 
1  6 
2  9 
1  12 
2  14 

ich die Summe der finden müssen aussieht t Spalte für jede Id von 2 und subtrahieren daraus die Summe der t Spalte für jede Id von 1.

So für dieses Beispiel die Summe von Id 1 ist 19, und die Summe von Id 2 ist 27.

ich die ausgegeben werden, um dann 8.

Ich könnte mir vorstellen, die Aussage möchte würde ähnlich aussehen:

SELECT sum(t) WHERE Id = 2 - sum(t) WHERE Id = 1; 

Aber das ist offensichtlich nicht die richtige Syntax.

Und ich entschuldige mich für die schlecht gezeichnete Tabelle, ich bin noch neu Stackoverflow.

Antwort

1

Sie könnten eine CASE-Anweisung verwenden:

SELECT 
    SUM(CASE 
     WHEN Id = 2 THEN t 
     WHEN Id = 1 THEN 0 - t 
     ELSE 0 
    END) AS mySum 
FROM myTable 

Hoffentlich als Service-Leistung funktioniert ... Ich teste nur auf SQL Server müssen, aber die Syntax das gleiche für MySQL sein sollte.

+0

Das funktioniert! Vielen Dank! – Schnagl

1
SELECT SUM(IF(`id` = 2, t, 0)) - SUM(IF(`id` = 1, t, 0)) as `result` FROM `table` 
0

Hängt davon ab, wie groß Ihr Tisch ist. Wenn es klein ist oder keine Indizes können Sie tun:

select sum(if(Id=2,t,if(Id=1,-t,0))) 
from data; 

Wenn Sie viele Reihen haben und haben einen Index in der Spalte Id:

select sum(id2)-sum(id1) 
from (
    select 0 as 'id1', sum(t) as 'id2' 
    from data 
    where id=2 
    union 
    select sum(t) as 'id1', 0 as 'id2' 
    from data 
    where id=1 
) as d; 
Verwandte Themen