Teradata: выбранные неагрегированные значения должны быть частью связанной группы .... я выбираю все неагрегированные поля - PullRequest
1 голос
/ 29 января 2020

Это сводит меня с ума. Может кто-нибудь помочь мне понять, почему я продолжаю получать сообщение об ошибке «Неагрегированные значения должны быть частью связанной группы»? Это не имеет смысла. Я не могу группировать по оконным функциям, поэтому только два выбранных поля, которые не являются агрегатами, являются первыми двумя. Внутренний запрос полностью в порядке, ошибка просто происходит, когда я запускаю все это. Я также попытался использовать фактические имена полей против порядка чисел c, и я получаю ту же ошибку, как если бы я должен был группировать по чему-то еще.

select
end_of_week, 
deal_id, 
sum(sum_nob) as sum_nob, 
ROW_NUMBER() OVER(ORDER BY sum_nob desc) AS row_num
from ( 
    select
    td_week_end (report_date) as end_of_week, 
    report_date, 
    deal_id, 
    sum (nob) as sum_nob
    from sandbox.rev_mgmt_deal_funnel df
    left join (
        select 
        deal_uuid  
        from sandbox.sup_analytics_deal_counts_final) s on df.deal_id = s.deal_uuid 

    where s.deal_uuid is null
    and grt_l3 = 'L3 - High End'
    and report_date >= '2019-10-01'
    group by end_of_week, 
    report_date, 
    deal_id) a
group by 1,2

Ответы [ 2 ]

0 голосов
/ 29 января 2020

Ваш запрос кажется гораздо более сложным, чем необходимо:

select td_week_end(report_date) as end_of_week, 
       deal_id, 
       sum(nob) as sum_nob,
       row_number() over (order by sum(nob)) as row_num
from sandbox.rev_mgmt_deal_funnel df left join
     sandbox.sup_analytics_deal_counts_final s
     on df.deal_id = s.deal_uuid 
where s.deal_uuid is null and
      grt_l3 = 'L3 - High End' and
      report_date >= '2019-10-01'
group by 1, 2;

Примечания:

  • Никаких подзапросов не требуется.
  • Нет необходимости агрегировать дважды .
  • Подзапрос для left join не требуется.
0 голосов
/ 29 января 2020

Проблема с ROW_NUMBER(), в разделе которого содержится неагрегированный столбец (sum_nob).

Я думаю, что вы хотите:

ROW_NUMBER() OVER(ORDER BY SUM(sum_nob) DESC) AS row_num

Это даст Вы рейтинг записи на основе сумма их sum_nob.

...