You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL查询需求:筛选偏离均值超1标准差的行并计算价格差异百分比

问题:筛选产品中价格偏离均值超过1个标准差的记录并计算相对百分比

需要编写MySQL查询语句,筛选各产品中与常规价格差异较大的行,计算价格相对该产品均值的百分比差异(低于100%表示价格低于均值,高于100%表示价格高于均值),同时忽略与均值偏差小于1个标准差的价格。

样本数据

_rowid_timestampcodefk_product_idfk_po_idcost
59522021-01-10 10:19:010080513675430.850
94032022-05-23 14:54:3400805136729420.850
415952022-11-23 11:20:2600805136733911.350
396352022-01-18 12:49:32Water134431530.140
401342022-04-06 22:39:34Water134427470.190
416762022-12-09 16:28:28Water134433980.140
396342022-01-18 12:49:31gr309203 344400102431540.770
356342021-03-03 15:23:23gr309203 344400102432030.790
412642022-11-16 11:41:44gr309203 344400102433570.970

当前错误查询

SELECT code, fk_product_id, cost, cost/
  (SELECT avg(cost) FROM po_line aa WHERE aa.code = code) AS percent 
FROM po_line 
WHERE (SELECT STDDEV(cost) FROM po_line ss WHERE ss.code = code)>1;

问题说明

该查询未返回任何结果,但实际应有3行数据(每个产品各1行)出现在报告中。

期望结果

codefk_product_idcostpercent
0080513671.350133
Water13440.190121
gr309203 34440010240.970115

解决方案

错误分析

  1. WHERE条件逻辑错误:原查询判断产品的标准差大于1,但样本中所有产品的标准差都远小于1(比如00805的标准差约为0.288),导致没有数据被筛选出来。正确逻辑应该是判断单条记录的价格与均值的偏差超过1个标准差,而非标准差本身大于1。
  2. 子查询别名冲突:子查询中aa.code = code未指定外层表别名,可能导致字段引用歧义,应明确关联外层表的code字段。
  3. 百分比计算遗漏:原查询的percent是cost/均值,需要乘以100并取整才能得到期望的百分比数值。

正确查询语句

使用窗口函数先计算每个产品分组的均值和标准差,再筛选符合条件的记录:

SELECT
    code,
    fk_product_id,
    cost,
    ROUND((cost / avg_cost) * 100) AS percent
FROM (
    SELECT
        code,
        fk_product_id,
        cost,
        AVG(cost) OVER (PARTITION BY code) AS avg_cost,
        STDDEV(cost) OVER (PARTITION BY code) AS stddev_cost
    FROM po_line
) AS sub
WHERE cost < (avg_cost - stddev_cost) OR cost > (avg_cost + stddev_cost);

查询逻辑说明

  1. 内层子查询通过PARTITION BY code对每个产品分组,计算出该组的平均价格avg_cost和标准差stddev_cost。
  2. 外层查询筛选出价格低于均值-标准差或高于均值+标准差的记录,即偏离常规价格超过1个标准差的行。
  3. 最后计算价格相对均值的百分比并取整,得到期望的percent字段。

内容的提问来源于stack exchange,提问作者James Risner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 09:55:25