PostgreSQL查询下单量比同品类其余产品平均值高20%的商品,禁用指定关键字
问题背景
之前曾询问过类似问题,获得过不少热心用户的帮助,原本以为解决了核心难点后可以自行完成剩余逻辑,实际未能实现,因此再次发布问题求助。
表结构说明
Products表结构示例:
| ProductCode | ProductType | .... |
|---|---|---|
| ref01 | BOOKS | .... |
| ref02 | ALBUMS | .... |
| ref06 | BOOKS | .... |
| ref04 | BOOKS | .... |
| ref07 | ALBUMS | .... |
| ref10 | TOYS | .... |
| ref13 | TOYS | .... |
| ref09 | ALBUMS | .... |
| ref29 | TOYS | .... |
| ref02 | ALBUMS | .... |
| ..... | ..... | .... |
Sales表结构示例:
| ProductCode | qty | .... |
|---|---|---|
| ref01 | 15 | .... |
| ref02 | 12 | .... |
| ref06 | 20 | .... |
| ref04 | 14 | .... |
| ref07 | 11 | .... |
| ref10 | 19 | .... |
| ref13 | 3 | .... |
| ref09 | 9 | .... |
| ref29 | 5 | .... |
| ref02 | 4 | .... |
| ..... | ..... | .... |
需求说明
需要找出下单总数量比*同品类其余所有产品的平均下单总数量高20%*的商品。
注意:单个商品可能对应多条下单记录,每次下单的qty(下单数量)可能不同,比如示例中的ref02,所有商品都存在这种情况,因此单个商品的下单总数量需要对该商品所有订单的qty求和得到。
预期结果示例
| ProductCode | qty | .... |
|---|---|---|
| ref02 | 16 | .... |
| ref06 | 20 | .... |
| ref07 | 11 | .... |
| ref10 | 19 | .... |
| ..... | ..... | .... |
计算逻辑说明
比如品类ALBUMS下的商品ref02,它的总下单量是12+4=16,同品类其余商品是ref07、ref09,二者总下单量分别是11、9,平均值为(11+9)/2=10,16>10*1.2,符合要求,其余商品以此类推计算。
约束条件
目前已经可以实现查询同品类所有产品的平均下单量,但无法计算同品类除当前产品外其余所有产品的平均下单量。之前获得的解决方案仅适用于每个商品只有一条订单的场景,当商品有多条订单时无法适用。
使用的数据库为PostgreSQL,练习要求禁止使用WITH、OVER、LIMIT、PARTITION、LATERAL这些关键字,目前找到的大部分解决方案都用到了上述关键字,不符合要求,求可行方案。
内容的提问来源于stack exchange,提问作者Hayul Kim
相关产品推荐
相关产品推荐

