mySQL:删除顶部和底部n%的数据后查找平均值

时间:2017-06-02 09:56:43

标签: mysql

我有一个包含3列的表:list_num,sales_price和days_on_market

我想运行一个查询,为列的平均值输出一个数字' days_on_market'按' sales_price'排序时,前5%和最后5%的行已被删除。

我找到了一个我认为会有帮助的例子,但答案太复杂了,我无法理解(我上周才开始学习mySQL)。请参阅此示例here

这是我的代码:

SELECT round(avg(days_on_market),0) as "90% Sell In"
FROM sold_q3_2016
WHERE list_num NOT IN (
    SELECT list_num FROM sold_q3_2016 ORDER BY sales_price LIMIT (count(list_num)*0.05)
    ) OR list_num NOT IN (
    SELECT list_num FROM sold_q3_2016 ORDER BY sales_price desc LIMIT (count(list_num)*0.05)
    )
;

现在我甚至无法运行这个,因为我在LIMIT子句中的count函数周围得到了语法错误,但是我想把它放在这里以显示我的思考过程。有什么想法吗?

1 个答案:

答案 0 :(得分:3)

试试这个:

SELECT AVG(days_on_market) 
FROM (
    SELECT 
    l.*
    , @rownumber := @rownumber + 1 AS rownumber
    FROM list_num l
    , (SELECT @rownumber := 0) var_init_subquery
    ORDER BY sales_price DESC
) subquery_alias
WHERE rownumber >= @rownumber * 0.05
AND rownumber <= @rownumber * 0.95