查询结束时有多个窗口定义

时间:2019-05-05 17:43:12

标签: mysql sql oracle window-functions

在Oracle中,编写窗口函数的另一种方法是这样的:

Select  a
           first_value(b) over w,
           first_value(c) over w
 from table 
window w as (partition by d order by e)

当我必须在同一分区上计算几列时,我发现这非常有用。但是,我想知道查询末尾是否可能有多个窗口定义。

Select  a
           first_value(b) over w,
           first_value(c) over w,
           first_value(h) over t,
           first_value(i) over t
from table 
window w as (partition by d order by e)
window t as (partition by f order by g)

我认为代码变得更容易理解,而不是在第二个窗口定义(t)的每一列的from中写入分区定义。

致谢

2 个答案:

答案 0 :(得分:1)

可以肯定,这是MySQL 8的语法。
我认为您看到的manual page与MySQL 8数据库有关,而不与Oracle数据库有关,因为MySQL数据库也归Oracle公司所有。

查询

.exe/dll

在Oracle数据库上将导致错误.ico,请参见demo

哪里

SELECT 
 COUNT(a."profit") OVER w
FROM 
 a 
WINDOW w as (PARTITION BY a."year")

在MySQL 8.0上可以正常工作,请参见demo

答案 1 :(得分:0)

尽管ANSI SQL 2003正式向SQL语言引入了窗口函数作为标准,并且确实支持WINDOW子句,但只有少数DBMS实际上将该子句集成到了他们的方言中,包括Postgres,Sybase Anywhere,SQLite ,现在是MySQL。其他专业,Oracle,DB2和SQL Server似乎不支持WINDOW子句。

因此,您需要为Oracle中的每种聚合用法重写窗口。