gpt4 book ai didi

mysql - 重写存储过程以返回而不是中值 (50%),20%/30% 等位置的项目

转载 作者:行者123 更新时间:2023-11-29 00:56:33 24 4
gpt4 key购买 nike

我有一个存储过程,它返回基于某个组的集合的中位数。

SET @myvar:='1';
SET @rownum=0;

SELECT result.readdate,
AVG(total_gallons) AS total_gallons
FROM (SELECT middle_rows.readdate,
numerated_rows.rownum,
numerated_rows.total_gallons
FROM (SELECT IF(@myvar = readdate, @rownum := IFNULL(@rownum,0) + 1, @rownum := 0) AS rownum,
@myvar := readdate AS readdate_alias,
total_gallons
FROM _temp_total_gallons
ORDER BY readdate,
total_gallons) numerated_rows,
(SELECT readdate,
COUNT(*) / 2 median
FROM _temp_total_gallons
GROUP BY readdate) middle_rows
WHERE numerated_rows.rownum BETWEEN ( middle_rows.median - IF(median = ROUND(median), 1, 0) - 0.5 ) AND ( middle_rows.median - IF(median = ROUND(median), 0, 0.5) )
AND numerated_rows.readdate_alias = middle_rows.readdate) result
GROUP BY readdate;

如您所见,这使用 BETWEEN 子句返回 50% 位置之间的行。如果找到多行(甚至设置),则外部选择会进行平均。

我尝试将 COUNT(*)/2 median 更改为 COUNT(*)/5 median 但查询返回的数据集要小得多,可能是因为between 子句过于严格,没有反射(reflect)出这 20%。

在像这样的集合中:

1 (2) 3 4 5 6 7 8 9 100 110

数字 2 为 20%。

将来我希望该脚本可用于返回任何百分比选择,例如 30% 或 40% 的项目。

最佳答案

看看下一页的信息,SQL 可以计算你想要的任何百分位数

http://rpbouman.blogspot.com/2008/07/calculating-nth-percentile-in-mysql.html

我自己在很多领域都使用过它,效果非常好。您只需要注意“group_concat_max_len”参数的值,因为这个值太小会搞砸您的结果。

希望对您有所帮助!

戴夫

关于mysql - 重写存储过程以返回而不是中值 (50%),20%/30% 等位置的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5855875/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com