Положительное или отрицательное значение зависит от отношения - можно ли ВЫБРАТЬ СУММУ (...) в одном выражении? - PullRequest
0 голосов
/ 06 февраля 2019

Каждая строка в таблице assets содержит поля value и type.Поле type является отношением к таблице types, где в каждой строке есть поле is_negative:

// assets
id  |  value  |  type
----------------------
 1  |   10    |   1
 2  |    4    |   2
 3  |    1    |   NULL


// types   
id  |  is_negative  
------------------
 1  |    0    
 2  |    1    

Я хотел бы запросить сумму всех значений активов, где тип указывает,значение является отрицательным или положительным.Активы без типов должны иметь отрицательное значение.

В приведенном выше примере результат должен быть 10 - 4 - 1 = 5

Возможно ли это как-то в пределах одного оператора SELECT SUM(value)...?

Ответы [ 3 ]

0 голосов
/ 06 февраля 2019

Хитрый способ (избегая условий):

select sum( value * (0.5 - coalesce(t.is_negative, 1)) * 2 )
from assets a
left join types t on t.id = a.type

Другой способ (более читабельный):

select sum(value * case when not is_negative then 1 else -1 end)
from assets a
left join types t on t.id = a.type;
0 голосов
/ 06 февраля 2019

... или очень похоже ...

 SELECT SUM(CASE WHEN COALESCE(is_negative,1)= 1 THEN value * -1 ELSE value END) x 
   FROM assets x 
   LEFT 
   JOIN types y
     ON y.id = x.type;
0 голосов
/ 06 февраля 2019

Да, довольно легко.

SELECT SUM(IF(is_negative = 1 OR is_negative IS NULL, value * -1, value))
FROM assets a
LEFT JOIN types t ON a.type = t.id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...