因为用groupBy + 聚合函数 只能求出Top1, 不能求TopN
这里使用row_number() over()
hive 的开窗函数row_number() over()
技术总结:
row_number() over(partition by sex order by age desc)
这句sql 就是按照下列方式进行分组—>排序–>打标签–>形成新的字段
SELECT a.*
FROM (
SELECT enterprise_id
,seller_code--虚拟id或者商家id
,spu_code
,group_buying_id-- 拼团活动id
,sale_inventory--已售库存
,min_order_num1--起购量1
,group_buying_type -- 类型 0-报名拼团活动(火拼团购),1-金标拼团活动(高毛专区)
,master_code_has_same
,crm_product_has
,row_number() over (PARTITION BY enterprise_id,seller_code ORDER BY master_code_has_same desc,crm_product_has desc,sale_inventory desc,min_order_num1 asc) rank
FROM dc_customer_order_recommend_product_prepare_4
) a
where a.rank <= 20