Можем ли мы использовать разделение и группирование вместе в teradata? - PullRequest
0 голосов
/ 27 апреля 2020

У меня есть запрос на выборку, который выглядит следующим образом:

   sel aa.*
    , min(Case when  BAL   >0           then       1
    when bb.CUST_DT  < aa.APPL_DT  then            2
    else                                           3
    end)  
    over (partition by app_id)     as cus_Typ
    from 
     tablea AS aa
      left join tableb      as        bb
    on aa.cust_num=bb.cust_num
    group by 1,2,3 

При запуске я вижу следующие ошибки.

  1. Ошибка, которую я получаю, если удалить «cus_Typ» (Группировать по столбцу 3) в предложении group by, равна

3504 Выбранные неагрегированные значения должны быть частью связанная группа

Если я добавлю cus_Typ (так как он есть в разделе разбивки / ранжирования), я получу следующую ошибку: -

Ошибка 5481 - Упорядоченные аналитические функции не разрешены в выражении group by

Сценарий ios, когда код работает нормально: -

  1. Без раздела группа работает нормально. С разделом выдает ошибку ..

  2. Без группировки по разделу работает нормально.

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

Спасибо.

1 Ответ

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

Некоторые из рабочих опций

select 
  column_1 
  , count(*) over(partition by column_1 order by column_1)  -- will give you "1" in this specific case
  , count(*)                 -- number of occurences of each column_1 values     
  , count(*) over()          -- will give you number of unique column_1 values
  , sum(count(*)) over ()    -- will give a total number of rows in the dataset
from  
  table_1
group by
  column_1

Удвоение разделов и групп, похоже, не работает, если вы пытаетесь запустить его в разных столбцах.

...