2016-10-26 2 views
0

Моя структура базы данных выглядит следующим образом:MySQL SELECT, ЕСЛИ дифференцироваться 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 

Очевидная проблема с выше, это то, что он SUMS все строки, так как я использовал SUM. Как я могу преодолеть эту дилемму? Я хочу получить количество альфа и бета отдельно.

Во-вторых, я смущен тем, почему бета-версия не имеет значения = 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; 

Пример:

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

Dang, Giorgos уже ответил на этот вопрос полностью 2 минуты назад! Хорошо, я сохраню этот ответ, если кто-то захочет использовать скрипку. – zedfoxus