2016-02-16 4 views
2

У меня есть таблица с двумя соответствующими полями name и value. Я хочу сделать запрос, который даст мне сумму всех отрицательных значений и всех положительных значений для каждого имени.mysql group by aggregation as column

Лучшее, что я получил следующий код:

SELECT `name`,sign(`value`),sum(`value`) 
FROM `testing` 
WHERE `value` != 0 
GROUP BY `name`,sign(`value`) 

он дал мне эти результаты:

name | sign(`value`) | sum(`value`) 
----------------------------------- 
A |  -1  | -9 
A |  1  | 21 
B |  -1  | -35 
B |  1  |  8 
C |  -1  | -16 
C |  1  | 21 

Какие результаты я хотел, но не так, как я хотел их.

Могу ли я заставить это выглядеть так?

name | -1 | 1 
------------------- 
A | -9 | 21 
B | -35 | 8 
C | -16 | 21 

Это мой первый вопрос, поэтому я надеюсь, что не написал его совершенно унизительно.

Заранее спасибо.

+0

Полностью унизительно - но мы все были там – Strawberry

+0

Спасибо за поддержку :) – JollyGood

ответ

1

A case заявление подходит в таких ситуациях.

select name, 
sum(case when value > 0 then value else 0 end) as positive_sum, 
sum(case when value < 0 then value else 0 end) as negative_sum 
from testing 
group by name; 
+1

Это Пропавший без вести «то» внутри корпуса, но другое то, что она работала великолепно. – JollyGood

+0

Спасибо. Я добавил «тогда». – Asaph