MySQL 8.0发布说明
MySQL 8.0源码文档10bet官方网站
Windows可以被定义和赋予用来引用它们的名称在
条款。要做到这一点,使用窗口
条款。如果在查询中存在,则窗口
从句位于the的位置之间有
和命令
子句,并且有这样的语法:
窗口window_name(window_spec) (window_name(window_spec)]…
对于每个窗口定义,window_name
是窗口名称,和window_spec
是同一类型的窗口规范之间的括号在
条款,如第12.21.2节,“窗口函数的概念和语法”:
window_spec:【window_name][partition_clause][order_clause][frame_clause]
一个窗口
子句对于包含多个的查询是有用的在
否则,子句将定义同一个窗口。相反,您可以定义窗口一次,给它一个名称,然后在在
条款。考虑这个查询,它多次定义了同一个窗口:
SELECT val () OVER (ORDER BY val) AS ' ROW_NUMBER ', RANK() OVER (ORDER BY val) AS ' ROW_NUMBER ', DENSE_RANK() AS ' DENSE_RANK ';
通过使用,可以更简单地编写查询窗口
控件中按名称引用窗口的方法在
条款:
SELECT count () OVER w AS ' ROW_NUMBER ', RANK() OVER w AS ' ROW_NUMBER ', DENSE_RANK() OVER w AS ' DENSE_RANK ' FROM numbers WINDOW w AS (ORDER BY val);
命名窗口还使试验窗口定义更容易,以查看对查询结果的影响。控件中的窗口定义只需修改窗口
多句,而不是多句在
条款的定义。
如果一个在
使用条款/ (
而不是window_name
…)在
,命名窗口可以通过添加其他子句来修改。例如,这个查询定义了一个包含分区和使用的窗口window_name
命令
在在
以不同方式修改窗口的子句:
SELECT DISTINCT year, country, FIRST_VALUE(year) OVER (w ORDER BY year DESC) AS first, FIRST_VALUE(year) OVER (w ORDER BY year DESC) AS last FROM sales WINDOW w AS(按国家划分);
一个在
子句只能向指定窗口添加属性,不能修改它们。如果已命名窗口定义包含分区、排序或框架属性,则在
引用窗口名的子句不能包含相同类型的属性,否则会出错:
允许此构造是因为窗口定义和引用
在
子句不包含相同类型的属性:OVER (w ORDER BY country)…窗口AS(按国家划分)
此结构不允许,因为
在
子句指定分区的
对于已经存在的命名窗口分区的
:OVER (w PARTITION BY year)…窗口AS(按国家划分)
命名窗口的定义本身可以以window_name
。在这种情况下,允许向前和向后引用,但不允许循环:
这是允许的;它包含了向前和向后的引用,但没有循环:
WINDOW w1 AS (w2), w2 AS (), w3 AS (w1)
这是不允许的,因为它包含一个循环:
WINDOW w1 AS (w2)、w2 AS (w3)、w3 AS (w1)