Вычисление разных сумм в зависимости от значения одного столбца - PullRequest
5 голосов
/ 18 февраля 2010

В псевдо-коде это в основном то, что я хотел бы сделать:

select
    if a1 >= 0 and a1 <= 2
        a2 + a7 + a8 as sum
    else
        a2 + a8 as sum
from table_name
;

(имена столбцов и т. Д. Приведены только для иллюстрации.)

На английском: мне нужно суммировать разные столбцы для каждой из нескольких тысяч записей. Я хотел бы сделать сумму в SQL, если это возможно. Существует только одно или два различия между условиями: либо отсутствует / добавлен один столбец, либо выполняется замена, либо и то и другое. Это основано на бизнес-логике приложения, а не на дизайнерском решении по моему выбору.

Я использую sqlite3 (3.6.10), что несколько ограничивает возможности.

1 Ответ

8 голосов
/ 18 февраля 2010

Здесь вы можете использовать трюк, который логические выражения оценивают в 0 или 1 в SQL:

SELECT a2 + a8 + a7 * (a1 BETWEEN 0 AND 2) AS SUM
FROM table_name

Более общий (и более традиционный) способ - использовать выражение CASE:

SELECT
    CASE WHEN a1 BETWEEN 0 AND 2
         THEN a2 + a7 + a8
         ELSE a2 + a8
    END AS SUM
FROM table_name

Вы также можете сделать что-то подобное, чтобы включить выражение CASE без повторения общих терминов:

SELECT
    a2 + a8 + (CASE WHEN a1 BETWEEN 0 AND 2 THEN a7 ELSE 0 END) AS SUM
FROM table_name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...