2016-10-26 7 views
0

Meine Datenbank-Struktur sieht wie folgt aus:MySQL SELECT IF unterscheiden SUM

id | valuefor | quantity 
1   alpha   500 
2   alpha   100 
3   beta   200 

ich folgenden Befehl mysql bin mit

SELECT IF(valuefor=alpha, SUM(quantity),0) as alpha 
    , IF(valuefor=beta, SUM(quantity),0) as beta 
    FROM mytable 

Stromausgang:

alpha | beta 
800   0 

Die offensichtliche Problem mit der Oben ist, dass es alle Zeilen SUMME, seit ich SUM verwendet habe. Wie kann ich dieses Dilemma überwinden? Ich möchte die Menge an Alpha und Beta getrennt bekommen.

Zweitens bin ich verwirrt, warum hatte die Beta nicht Wert = 800 in der Ausgabe und warum sagt es 0. Dies ist nur für mein besseres Verständnis des Problems.

Ich möchte etwas zu sehen führen, wie folgt:

alpha | beta 
600   200 
+0

Das ist nicht ein Dilemma ist. – Strawberry

Antwort

2

Try this:

SELECT SUM(CASE WHEN valuefor=alpha THEN quantity ELSE 0 END) AS alpha, 
     SUM(CASE WHEN valuefor=beta THEN quantity ELSE 0 END) AS beta 
FROM mytable 
+0

Ok wow, das war einfach unglaublich. Ich danke dir sehr! Und hier dachte ich, dass es nicht möglich ist. Danke für die Hilfe –

1

Sie können die case Erklärung für diese Verwendung in etwa so:

select 
    sum(case valuefor when 'alpha' then quantity else 0 end) as alpha, 
    sum(case valuefor when 'beta' then quantity else 0 end) as beta 
from test; 

Beispiel:

http://sqlfiddle.com/#!9/f07bbf

create table test (
    id int, 
    valuefor varchar(20), 
    quantity int 
); 

insert into test values 
(1, 'alpha', 500), 
(2, 'alpha', 100), 
(3, 'beta', 200); 

Ergebnis

| alpha | beta | 
|-------|------| 
| 600 | 200 | 
+0

Dang, Giorgos hat diese Frage bereits beantwortet vor 2 Minuten! Nun, ich werde diese Antwort behalten, falls jemand die Geige benutzen möchte. – zedfoxus