gpt4 book ai didi

mysql - MariaDB如何制作RMS功能?

转载 作者:行者123 更新时间:2023-11-29 19:51:32 25 4
gpt4 key购买 nike

我尝试在 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 标准通用表表达式 (CTE)。 Archarm Linux 上的最后一个问题已针对版本 10.2.2 进行修复: MDEV-8308

而且我不知道如何以不同的方式完成相同的工作。如果有人可以帮忙的话。

最佳答案

通过使用作为 PRIMARY KEYAUTO_INCRMENT 创建实际表来模拟 ROW_NUMBER()。然后您可以将该表与其自身进行“自连接”。这只比您的 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 不起作用,因为(直到最近)您无法在同一查询中两次使用这种临时表。 (为什么?打败我!)

关于mysql - MariaDB如何制作RMS功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40808738/

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