Оператор Redshift SQL, который вернет 1 или 0, если оператор select вернет какие-либо строки - PullRequest
2 голосов
/ 14 июля 2020

У меня есть следующий оператор выбора в Redshift, который будет возвращать строки с определенными значениями, если выполняется условие внутри. Я хочу преобразовать это в проверку DQ, которая вернет 1 (Истина), если строки не возвращены, или 0, если возвращается какая-либо строка, но я не знаю, где применить оператор case. Вот инструкция select:

 select * from (select brand,calendar_dt, product,
 count(account) count from revenue_base 
 where player_days = 0 and volume_loc >0 group by brand,calendar_dt, product) 
 where count > 1000 and calendar_dt >='2020-07-12'
 and calendar_dt < '2020-07-13'

Не могли бы вы предложить мне несколько идей для этого?

Ответы [ 2 ]

1 голос
/ 14 июля 2020

Вы можете попробовать использовать exists logi c здесь:

select
    case when not exists (
        select 1 from
        (
            select brand, calendar_dt, product, count(account) as count
            from revenue_base 
            where player_days = 0 and volume_loc > 0
            group by brand, calendar_dt, product
        ) t
        where calendar_dt >= '2020-07-12' and calendar_dt < '2020-07-13' and
              count > 1000
    )
         then 1 else 0 end as result;
0 голосов
/ 14 июля 2020

Во-первых, Redshift поддерживает логические значения, поэтому case не требуется. Во-вторых, выполните фильтрацию на дату до агрегации. Обычно это быстрее.

Затем вы можете фильтровать по счетчику с помощью предложения having, поэтому подзапрос не требуется:

select not exists (select 1
                   from revenue_base 
                   where player_days = 0 and volume_loc > 0 and
                         calendar_dt >= '2020-07-12' and calendar_dt < '2020-07-13'
                   group by brand, calendar_dt, product
                   having count(*) > 1000
                  ) as result
...