Sql Oracle与MariaDB的分析功能
当前正在将我的Oracle查询迁移到MariaDB 10.4 我在分析功能方面有困难 MARIADB代码: 此代码工作正常,但在验证输出后,Oracle的结果与MariaDB的结果不同(相同数据) 我的oracle脚本中有我在mariadb中删除的脚本Sql Oracle与MariaDB的分析功能,sql,oracle,mariadb,mariadb-10.4,Sql,Oracle,Mariadb,Mariadb 10.4,当前正在将我的Oracle查询迁移到MariaDB 10.4 我在分析功能方面有困难 MARIADB代码: 此代码工作正常,但在验证输出后,Oracle的结果与MariaDB的结果不同(相同数据) 我的oracle脚本中有我在mariadb中删除的脚本 select cgi, timestamp, hour, rat_type, dl_tput, ntile(24) over (partition by timestamp,rat_type order by dl_tput) as
select cgi, timestamp, hour, rat_type, dl_tput,
ntile(24) over (partition by timestamp,rat_type order by dl_tput) as dl_tput_ntiled,
count(*) over () as dl_tput_cnt
from (...)
count(*)over()
是否影响我的输出?这个分析函数的MariaDB的替代查询是什么?我怀疑这是ties的问题ntile()
将在不同的存储桶中拆分具有相同组的行,因为它的任务是使每个存储桶的大小相同
作为一个极端的例子,如果
dl\u tput
的所有值都相同,则可以分配1到24的任何值。我怀疑这是领带的问题ntile()
将在不同的存储桶中拆分具有相同组的行,因为它的任务是使每个存储桶的大小相同
作为一个极端的例子,如果dl\u tput
的所有值都相同,则可以指定1到24之间的任何值。在本演示中:
您将看到一个小示例,其中我输入了一些数据,并有一个查询:
select pk
, a
, b
, ntile(24) over (partition by a, b order by pk)
, count(*) over () as dl_tput_cnt
from t1;
在左上角有一个不同数据库的列表,您可以从中进行选择。如果在本例中选择Oracle,或者选择Maria DB,结果将是相同的。这并不能保证count
和ntile
不会对您的不同结果负责,但请告诉我们有关此结果的更多信息:
但是在验证了输出之后,Oracle的结果就不同了
根据MariaDB的结果(相同数据)
也许这对你的案子会有帮助
还有一件事。
我认为您应该检查从Maria DB获得的查询结果:
SELECT date(timestamp) FROM JUST_TEST_A
SELECT date_format(timestamp,'%H') FROM JUST_TEST_A
并将它们与您从Oracle收到的有关Oracle的日期和日期格式等效函数的旧结果进行比较。在此演示中:
您将看到一个小示例,其中我输入了一些数据,并有一个查询:
select pk
, a
, b
, ntile(24) over (partition by a, b order by pk)
, count(*) over () as dl_tput_cnt
from t1;
在左上角有一个不同数据库的列表,您可以从中进行选择。如果在本例中选择Oracle,或者选择Maria DB,结果将是相同的。这并不能保证count
和ntile
不会对您的不同结果负责,但请告诉我们有关此结果的更多信息:
但是在验证了输出之后,Oracle的结果就不同了
根据MariaDB的结果(相同数据)
也许这对你的案子会有帮助
还有一件事。
我认为您应该检查从Maria DB获得的查询结果:
SELECT date(timestamp) FROM JUST_TEST_A
SELECT date_format(timestamp,'%H') FROM JUST_TEST_A
并将它们与您从Oracle收到的有关Oracle的日期和日期格式等效函数的旧结果进行比较。您有
代码>在您的问题中,针对Oracle代码。但是,Oracle不支持MariaDB中使用的函数,因此不清楚子查询在做什么。还有,结果有多大不同?你怎么知道底层数据是相同的?@GordonLinoff我相信这。。。表示另一部分与上述代码相同。@Ace,count(*)over()将在MariDB中工作(…)与中的子查询相同maria@VBoka . . . 如果是,它将在Oracle中生成语法错误,因为不支持像date\u format()
和date()
这样的函数代码>在您的问题中,针对Oracle代码。但是,Oracle不支持MariaDB中使用的函数,因此不清楚子查询在做什么。还有,结果有多大不同?你怎么知道底层数据是相同的?@GordonLinoff我相信这。。。表示另一部分与上述代码相同。@Ace,count(*)over()将在MariDB中工作(…)与中的子查询相同maria@VBoka . . . 如果是,它将在Oracle中生成语法错误,因为不支持date\u format()
和date()
等函数。@AceCGI
不是ntile()
逻辑的一部分,我认为这没有任何影响。@AceCGI
不是ntile()
逻辑的一部分,我认为这没有任何影响。嗨@Ace,你对此有什么反馈吗?我很高兴听到你这么说。谢谢你接受这个答案。干杯你好@Ace,你对此有何反馈?我很高兴听到你这么说。谢谢你接受这个答案。干杯