首页 > 解决方案 > 如何合并我的数据以减少 MariaDB 中不同值的数量?

问题描述

我有每秒一条记录的风速数据。我发现 95% 以上的数据是 0.36 m/s 的倍数(参见截图Wind Speeds),我希望这是我们仪器配置方式的结果(仍在研究中) )。

我想要做的是将所有值向上或向下舍入到 0.36 的倍数,这样我就可以生成概率密度视觉。

截图中的表格来自这段代码:

WITH freqCTE AS
    (
    SELECT rd.wind_speed,
        COUNT(rd.wind_speed) AS AbsFreq,
        CAST(ROUND(100. * (COUNT(rd.wind_speed)) / (SELECT COUNT(*) FROM raw_data), 3) AS DEC(4,3)) AS AbsPerc
        FROM raw_data AS rd
        GROUP BY rd.wind_speed
    )
SELECT wind_speed, AbsFreq,
    SUM(AbsFreq) OVER(ORDER BY wind_speed ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS CumFreq,
    AbsPerc,
    SUM(AbsPerc) OVER(ORDER BY wind_speed ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS CumPerc,
    CAST(REPEAT('.',AbsPerc*100) AS VARCHAR(200)) AS Histogram
    FROM freqCTE
    ORDER BY wind_speed;

而且我知道我可以像这样绕过风速:

ROUND(rd.wind_speed / 0.36, 0) * 0.36

我在 CTE 内尝试了各种事情,在 CTE 之后,尝试使用 SET,但我无法让它做我想做的事。我真正想看到的是一个类似的表格:

ws36     freq
0.00     4000
0.36     500
0.72     600
1.08     800
etc.

标签: sqlmariadbroundingcommon-table-expression

解决方案


我正在考虑一个更简单的查询:

SELECT ROUND(rd.wind_speed / 0.36, 0) * 0.36 as wind_speed_036,
       COUNT(*) as cnt
FROM raw_data  rd
GROUP BY wind_speed_036
ORDER BY wind_speed_036;

推荐阅读