gpt4 book ai didi

mysql按组百分位排名

转载 作者:行者123 更新时间:2023-11-30 01:31:13 24 4
gpt4 key购买 nike

我有一个包含日期、id 和值的表,每个日期大约有 1000 个 id 行。我需要按日期计算每行的百分位数排名。我使用以下代码来计算单个日期的百分位数排名,但是对于超过 10 年的每日数据,按日期运行效率非常低。似乎它应该能够在 MySQL 中制定,但我一直无法使其工作。

Date   ID    Value
date1 01 -7.2
date1 02 0.6
date2 01 1.2
date2 02 3.8

SELECT c.id, c.value, ROUND( (
(@rank - rank) / @rank ) *100, 2) AS rank
FROM (
SELECT * , @prev := @curr , @curr := a.value,
@nxtRnk := @nxtRnk + 1,
@rank := IF( @prev = @curr , @rank , @nxtRnk ) AS rank
FROM (
SELECT id, value
FROM temp
WHERE date = '2013-06-28'
) AS a, (

SELECT @curr := NULL , @prev := NULL , @rank :=0, @nxtRnk :=0
) AS b
ORDER BY value DESC
) AS c

所以基本上我想 SELECT DISTINCT(date),然后对于每个日期执行上述 SELECT,前面是 INSERT INTO table2( ... ) 将结果写入 table2。

感谢您的帮助,休

最佳答案

我最终通过使用临时表开发了一个可接受的解决方案。也许不是最佳解决方案,但它在 100 万条以上记录的表上大约 5 秒即可运行。

我的临时表 (t1) 包含日期和日期的行数。

上面的第三个选择改为SELECT t1.date、t1.cnt、id、值 FROM t1 LEFT JOIN temp ON(t1.date = temp.date)

此外,上面第一个 SELECT 中的计算已更改为使用 c.cnt 而不是 @rank,并且创建了一个 @prevDate 变量来重置日期更改时的排名计数。

感谢所有看到此问题并尝试找到解决方案的人。

关于mysql按组百分位排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17433645/

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