1867. 最大数量高于平均水平的订单 🔒
题目描述
表:OrdersDetails
+-------------+------+ | Column Name | Type | +-------------+------+ | order_id | int | | product_id | int | | quantity | int | +-------------+------+ (order_id, product_id) 是该表的主键(由多个列组合而成的唯一值)。 一个订单由多行表示,每行对应订单中的一个产品。 该表中的每一行包含订单 order_id 中产品 product_id 的订购数量 quantity。
你正在运营一个电子商务网站,目前正在寻找 不平衡订单。 不平衡订单 是指这样一个订单:其 最大 商品数量 严格大于 所有订单(包括该订单自身)的 平均 商品数量。
一个订单的 平均 商品数量计算方式为:(该订单所有商品的总数量)/(该订单中不同商品的数量)。 一个订单的 最大 商品数量是该订单中任意单个商品的 quantity 中的最大值。
编写一个解决方案,找出所有 不平衡订单 的 order_id。
按 任何顺序 返回结果表。
结果格式如下所示。
示例 1:
输入: OrdersDetails 表: +----------+------------+----------+ | order_id | product_id | quantity | +----------+------------+----------+ | 1 | 1 | 12 | | 1 | 2 | 10 | | 1 | 3 | 15 | | 2 | 1 | 8 | | 2 | 4 | 4 | | 2 | 5 | 6 | | 3 | 3 | 5 | | 3 | 4 | 18 | | 4 | 5 | 2 | | 4 | 6 | 8 | | 5 | 7 | 9 | | 5 | 8 | 9 | | 3 | 9 | 20 | | 2 | 9 | 4 | +----------+------------+----------+ 输出: +----------+ | order_id | +----------+ | 1 | | 3 | +----------+ 解释: 每个订单的平均商品数量为: - order_id=1:(12+10+15)/3 = 12.3333333 - order_id=2:(8+4+6+4)/4 = 5.5 - order_id=3:(5+18+20)/3 = 14.333333 - order_id=4:(2+8)/2 = 5 - order_id=5:(9+9)/2 = 9 每个订单的最大商品数量为: - order_id=1:max(12, 10, 15) = 15 - order_id=2:max(8, 4, 6, 4) = 8 - order_id=3:max(5, 18, 20) = 20 - order_id=4:max(2, 8) = 8 - order_id=5:max(9, 9) = 9 订单 1 和 3 是不平衡订单,因为它们的最大商品数量大于所有订单的平均商品数量。
解法
方法一
思考
要找出「最大单行数量」严格大于「任意订单平均数量的最大值」的订单。平均与最大都需按 \(order\_id\) 聚合,再做跨订单比较。
先按订单求出 \(MAX(quantity)\) 与 \(SUM/COUNT\),再用子查询取全部平均的最大值作为阈值。外层筛选最大数量超过该阈值的 \(order\_id\)。
1 2 3 4 5 6 7 8 9 10 11 12 13 | |