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
的来源,所以我只是猜测。
我正在尝试执行此查询
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
的来源,所以我只是猜测。