PARTITION BY выражение ссылается на столбец sku, который не группируется и не агрегируется - PullRequest
0 голосов
/ 22 мая 2018

Я пытаюсь выполнить этот запрос

select
rank() over (partition by substr(upper(sku),1,19) order by round(avg(inpf.amount),2) desc) as ranking from erp.input_factor  inpf

Я получаю сообщение об ошибке: Столбец выражения выражения PARTITION BY SKU, который не группируется и не агрегируется в [5:40]

изКонечно, я не хочу добавлять sku в группу, поэтому в предложении over.что здесь не так?

актуальный запрос:

select sq.fab_id , sq.sku as sku
from
(
select upper(inpf.fab_id) as fab_id, substr(upper(sku),1,19) as sku ,round(avg(inpf.amount),2) as amount,
  rank() over (partition by substr(upper(sku),1,19) order by round(avg(inpf.amount),2) desc) as ranking ,
fi.main_construction as construct from erp.input_factor  inpf
left join
erp.fabric_information fi
on upper(inpf.fab_id) = upper(fi.fab_id)

where length(inpf.fab_id) > 3
group by inpf.fab_id , substr(upper(sku),1,19) , fi.main_construction
) sq
where (sq.construct = 1)

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

Это особенность BigQuery.Простое решение - это подзапрос:

select sq.fab_id , sq.sku as sku
from (select upper(inpf.fab_id) as fab_id, sku19 as sku, 
             round(avg(inpf.amount),2) as amount,
             rank() over (partition by sku19 order by inpf.amount desc) as ranking,
            fi.main_construction as construct
      from erp.input_factor inpf left join
           (select fi.*, substr(upper(sku), 1, 19) as sku19
            from erp.fabric_information fi
           ) fi
           on upper(inpf.fab_id) = upper(fi.fab_id)
      where length(inpf.fab_id) > 3
      group by inpf.fab_id, sku19 , fi.main_construction
     ) sq
where sq.construct = 1;

Примечание. Вы не замечаете, откуда берется sku, поэтому я только догадался.

0 голосов
/ 22 мая 2018

Было бы лучше предоставить описание исходной таблицы и образец данных.

Я просто предполагаю, что проблема в order by round(avg(inpf.amount),2) desc.Avg() является агрегатной функцией, и ни у вас нет предложения group by, ни avg() не является единственным столбцом.

...