Суммируйте два столбца в SQL, где один столбец должен быть сведен на нет - PullRequest
0 голосов
/ 08 ноября 2018

Я хотел бы суммировать два столбца в SQL и, если сумма больше 0, вывести ее в один из столбцов, а если она меньше 0, вывести в другой столбец.

Мой код выглядит так:

SELECT IF(SUM(`processed_quantity_long`,-1*`processed_quantity_short`) > 0,SUM(`processed_quantity_long`,-1*`processed_quantity_short`) AS `Position Long`,SUM(`processed_quantity_long`,-1*`processed_quantity_short`) AS `Position Short`) 
From table A 
GROUPBY date

Это возвращает мне эту ошибку:

В вашем синтаксисе SQL есть ошибка; проверьте руководство, соответствующее вашей версии сервера MariaDB, на предмет правильного синтаксиса, который можно использовать около '-1 *processed_quantity_short)> 0, SUM (processed_quantity_long, - 1 * `processing_qua' в строке 5

Не уверен, как решить эту ошибку.

Ответы [ 3 ]

0 голосов
/ 08 ноября 2018

SUM не принимает двух аргументов. Просто вычтите два числа перед вычислением суммы:

SELECT
    CASE WHEN SUM(processed_quantity_long - processed_quantity_short) >= 0 THEN SUM(processed_quantity_long - processed_quantity_short) END AS `Position Long`,
    CASE WHEN SUM(processed_quantity_long - processed_quantity_short) <  0 THEN SUM(processed_quantity_long - processed_quantity_short) END AS `Position Short`
FROM tablea
GROUP BY date
0 голосов
/ 08 ноября 2018

Пожалуй, самый простой способ написать код:

SELECT GREATEST(SUM(processed_quantity_long - processed_quantity_short), 0) AS Position_Long,
       LEAST(SUM(processed_quantity_long - processed_quantity_short), 0) AS Position_Short
FROM tablea
GROUP BY date
0 голосов
/ 08 ноября 2018

вы ошиблись внутри, если

 SELECT IF(
          SUM(processed_quantity_long-processed_quantity_short) > 0,
          SUM(`processed_quantity_long`-`processed_quantity_short`) ,
          SUM(`processed_quantity_long`-`processed_quantity_short`)  AS  `Position Short`
    ) From tableA GROUP BY date

общее, если утверждение как показано ниже

SELECT IF(500<1000, "YES", "NO")

Или используйте случай, когда

case when SUM(`processed_quantity_long`-`processed_quantity_short`) > 0
 then SUM(`processed_quantity_long`-`processed_quantity_short`)
 else SUM(`processed_quantity_long`-`processed_quantity_short`) as position
from tableA GROUP BY date
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...