在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中写入分区定义。
致谢
答案 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中的每种聚合用法重写窗口。