PARTITION BY 表达式引用既未分组也未聚合的列 sku

PARTITION BY expression references column sku which is neither grouped nor aggregated

我正在尝试执行此查询

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 表达式引用在 [5:40]

既未分组也未聚合的列 SKU

当然,我不希望将 sku 添加到 group by 这就是它在 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)

这是 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 的来源,所以我只是猜测。