mysql - 如何计算每个对象的值之间的平均差异?

标签 mysql sql

我有一个具有下一个结构的订单表:

| 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/

相关文章:

mysql - 错误1005无法创建表user.EMPLOYEE和user.STORE(errno 150)

php - 从 mysql 中的多行添加到 php

mysql - 删除数据表单表外键约束错误

mysql - SQL 查询查找唯一计数

sql - INSERT INTO 使用子查询和一些操作

SQL:计算所有值的总和*和*仅匹配条件的值的总和

sql - where 子句中的 case 导致错误 : An expression of non-boolean type specified in a context where a condition is expected, 靠近 ')'

mysql - 我的大表连接有问题吗?

mysql - 使用Sqoop从mysql导入数据到Hadoop但是失败

SQL- 七日周报(星期日至星期六)