我有一个具有下一个结构的订单表:
| Field | Type |
|-------------|--------------|
| id | bigint(20) |
| customer_id | int(11) |
| item | varchar(256) |
| price | int(11) |
我需要获取每个客户的订单价格差异的平均值。 假设 id 为 20 的客户有下一个订单
| id | customer_id | item | price |
|-----|-------------|----------|-------|
| 356 | 20 | Jacket | 85 |
| 412 | 20 | Trousers | 32 |
| 781 | 20 | Gloves | 15 |
| 802 | 20 | Boots | 26 |
订单价格的差异如下:
- [85-32] = 23
- [32-15] = 17
- [15-26] = 11
那么平均差就是 (23 + 17 + 11)/3 = 17
但是需要对所有客户计算这个平均差值,然后求出他们之间的平均值
最佳答案
您真正想在这里使用的函数是 LEAD()
,但您的 MySQL 版本不支持它。作为一种解决方法,我们可以尝试使用相关子查询来查找铅价,然后汇总该结果以找到总体平均值:
SELECT
SUM(price_diff) / ((SELECT COUNT(*) FROM orders) - 1) AS avg_diff
FROM
(
SELECT
ABS(o1.price - COALESCE((SELECT o2.price FROM orders o2
WHERE o2.id > o1.id
ORDER BY o2.id LIMIT 1), o1.price)) price_diff
FROM orders o1
) t;
关于mysql - 如何计算每个对象的值之间的平均差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57953702/