Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Oracle与MariaDB的分析功能_Sql_Oracle_Mariadb_Mariadb 10.4 - Fatal编程技术网

Sql 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

当前正在将我的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 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()
等函数。@Ace
CGI
不是
ntile()
逻辑的一部分,我认为这没有任何影响。@Ace
CGI
不是
ntile()
逻辑的一部分,我认为这没有任何影响。嗨@Ace,你对此有什么反馈吗?我很高兴听到你这么说。谢谢你接受这个答案。干杯你好@Ace,你对此有何反馈?我很高兴听到你这么说。谢谢你接受这个答案。干杯