Как вставить 2 случая, когда условия в функцию sum () в SQL? - PullRequest
0 голосов
/ 28 апреля 2020

Я хотел бы сделать следующее - вставить 2 условия для суммирования total_orders в SQL:

sum(case when A_voucher <> '' then 0 when A_voucher = '' then orders end) as total_orders

У кого-нибудь есть идеи, как исправить этот синтаксис?

Спасибо заранее!

Ответы [ 3 ]

0 голосов
/ 28 апреля 2020

Для вашего примера вы получите одно условие ...

sum(case when A_voucher = '' then orders else 0 end) as total_orders

, которое эквивалентно версии двух условий, которую вы запросили

sum(
    case 
        when A_voucher = '' then orders
        when A_voucher <> '' then 0 
    end) as total_orders
0 голосов
/ 28 апреля 2020

Хотя вы можете использовать CASE в этом сценарии, отфильтрованные агрегаты являются более краткими и более удобными для чтения:

sum(orders) FILTER (WHERE A_voucher = '')

Вот полный рабочий пример:

presto> WITH t(orders, A_voucher) AS (
     ->     VALUES (1, ''), (2, 'x'), (4, ''), (8, 'y'))
     ->
     -> SELECT sum(orders) FILTER (WHERE A_voucher = '') AS total_orders
     -> FROM t
     -> ;

 total_orders
--------------
            5
0 голосов
/ 28 апреля 2020

Попробуйте вместо этого:

SUM(CASE WHEN A_voucher = '' THEN orders ELSE 0 END) AS total_orders

Объяснение

Кажется, вы путаете простой синтаксис выражения CASE с искомым синтаксисом выражения CASE. См. Документацию для CASE :

Выражение CASE имеет два формата:

  • Простое выражение CASE сравнивает выражение с набором простых выражений для определения результата.
  • Найденное выражение CASE оценивает набор логических выражений для определения результата.

Требуется синтаксис искомого выражения CASE:

CASE
     WHEN Boolean_expression THEN result_expression [ ...n ] 
     [ ELSE else_result_expression ] 
END

...