MariaDB如何制作RMS功能?
MariaDB how to make an RMS function?
我尝试在 My MariaDB 上创建一个 RMS 函数。我找到了这个主题:Link.
使用此代码:
WITH nums AS
(
SELECT value, ROW_NUMBER() OVER (ORDER BY orderer) AS rn
FROM source
)
SELECT SQRT(AVG(POWER(np.value - nn.value, 2)))
FROM nums np
JOIN nums nn
ON nn.rn = np.rn + 1
问题是我的版本 (10.1.18-MariaDB) 不支持 SQL 标准通用 Table 表达式 (CTE)。 Archarm 上的最后一个 Linux 版本 10.2.2 已修复:MDEV-8308
而且我不知道如何以不同的方式完成相同的工作。如果有人可以提供帮助。
通过创建一个带有 AUTO_INCREMENT
即 PRIMARY KEY
的实际 table 来模拟 ROW_NUMBER()
。然后你可以对 table 本身做一个 "self join"。这仅比您的 CTE 尝试多击几次键:
CREATE TABLE nums (
rn INT AUTO_INCREMENT PRIMARY KEY
) ENGINE=InnoDB
SELECT value FROM source ORDER BY orderer;
SELECT SQRT(AVG(POWER(np.value - nn.value, 2)))
FROM nums AS np
JOIN nums AS nn ON nn.rn = np.rn + 1;
备注:
CREATE TABLE
中定义的 id
将补充来自`SELECT. 的 value
- 这假设
auto_increment_increment = 1
。如果您使用的是 Galera(等),请将 +1
更改为 + @@auto_increment_increment
。
CREATE TEMPORARY TABLE
将不起作用,因为(直到最近)您不能在同一个查询中两次使用那种临时 table。 (为什么?打败我了!)
我尝试在 My MariaDB 上创建一个 RMS 函数。我找到了这个主题:Link.
使用此代码:
WITH nums AS
(
SELECT value, ROW_NUMBER() OVER (ORDER BY orderer) AS rn
FROM source
)
SELECT SQRT(AVG(POWER(np.value - nn.value, 2)))
FROM nums np
JOIN nums nn
ON nn.rn = np.rn + 1
问题是我的版本 (10.1.18-MariaDB) 不支持 SQL 标准通用 Table 表达式 (CTE)。 Archarm 上的最后一个 Linux 版本 10.2.2 已修复:MDEV-8308
而且我不知道如何以不同的方式完成相同的工作。如果有人可以提供帮助。
通过创建一个带有 AUTO_INCREMENT
即 PRIMARY KEY
的实际 table 来模拟 ROW_NUMBER()
。然后你可以对 table 本身做一个 "self join"。这仅比您的 CTE 尝试多击几次键:
CREATE TABLE nums (
rn INT AUTO_INCREMENT PRIMARY KEY
) ENGINE=InnoDB
SELECT value FROM source ORDER BY orderer;
SELECT SQRT(AVG(POWER(np.value - nn.value, 2)))
FROM nums AS np
JOIN nums AS nn ON nn.rn = np.rn + 1;
备注:
CREATE TABLE
中定义的id
将补充来自`SELECT. 的 - 这假设
auto_increment_increment = 1
。如果您使用的是 Galera(等),请将+1
更改为+ @@auto_increment_increment
。 CREATE TEMPORARY TABLE
将不起作用,因为(直到最近)您不能在同一个查询中两次使用那种临时 table。 (为什么?打败我了!)
value