2016-10-26 9 views
0

次のように私のデータベース構造に見える:私はmysqlのコマンドで、以下の使用していますMySQLのSELECT IFは区別SUM

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

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

電流出力:と

alpha | beta 
800   0 

明白な問題私がSUMを使用して以来、それはすべての行をSUMSしているということです。どうすればこのジレンマを克服できますか?私はアルファとベータの量を別々に得たいと思っています。

第二に、私はベータ版は=出力の800価値を持っていなかったし、なぜそれがこれは単なる問題の私の理解を容易にするためである0を言うん理由として混乱しています。

私は次のように何かを探すようになりたい:

alpha | beta 
600   200 
+0

。 – Strawberry

答えて

2

はこれを試してみてください:

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

うわー、それは単に驚くべきことでした。どうもありがとうございます!そしてここで私はそれが不可能だと思った。ヘルプ –

1

あなたはとても似ているためcaseステートメントを使用することができます。

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; 

例:

0ジレンマはありません

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); 

結果

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

ダンのためのおかげで、Giorgosはすでにフル2分前にこの質問に答え!まあ、私は誰かがフィドルを使用したい場合には、この答えをしておこう。 – zedfoxus