Как мне объединить мои данные, чтобы уменьшить количество различных значений в MariaDB? - PullRequest
1 голос
/ 17 июня 2019

У меня есть данные о скорости ветра с одной записью в секунду.Я обнаружил, что 95% + данных кратны 0,36 м / с (см. Скриншот Скорость ветра ), и я ожидаю, что это результат того, как наш инструментсконфигурирован (все еще работает над этим).

Я хочу округлить все значения в большую или меньшую сторону до значения, кратного 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.

1 Ответ

0 голосов
/ 17 июня 2019

Я думаю о более простом запросе:

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;
...