<firstterm>Window functions</firstterm> provide the ability to perform calculations across sets of rows that are related to the current query row. See <xref linkend="tutorial-window"/> for an introduction to this feature, and <xref linkend="syntax-window-functions"/> for syntax details. ウィンドウ関数は現在の問い合わせ行に関連した行集合に渡っての計算処理機能を提供します。 この機能の手引きは3.5を、文法の詳細は4.2.8を参照してください。
The built-in window functions are listed in
<xref linkend="functions-window-table"/>. Note that these functions
<emphasis>must</emphasis> be invoked using window function syntax, i.e., an
<literal>OVER</literal> clause is required.
組み込みウィンドウ関数は表 9.65に一覧されています。
これらの関数は必ずウィンドウ関数構文で呼び出されなければなりません。つまり、OVER
句が必要です。
In addition to these functions, any built-in or user-defined
ordinary aggregate (i.e., not ordered-set or hypothetical-set aggregates)
can be used as a window function; see
<xref linkend="functions-aggregate"/> for a list of the built-in aggregates.
Aggregate functions act as window functions only when an <literal>OVER</literal>
clause follows the call; otherwise they act as plain aggregates
and return a single row for the entire set.
これらの関数に加え、すべての組み込み、またはユーザ定義の汎用集約関数または統計集約関数もウィンドウ関数として使用できます(ただし順序集合や仮想集合集約はそうではありません)。組み込み集約関数一覧は9.21を参照してください。
集約関数は、呼び出しの後にOVER
句が続いた場合のみウィンドウ関数として動作します。それ以外の場合は、非ウィンドウの集約関数として動作し、集合全体に対して1行だけを返します。
表9.65 汎用ウィンドウ関数
All of the functions listed in
<xref linkend="functions-window-table"/> depend on the sort ordering
specified by the <literal>ORDER BY</literal> clause of the associated window
definition. Rows that are not distinct when considering only the
<literal>ORDER BY</literal> columns are said to be <firstterm>peers</firstterm>.
The four ranking functions (including <function>cume_dist</function>) are
defined so that they give the same answer for all rows of a peer group.
表 9.65に列挙された関数はすべて、対応するウィンドウ定義のORDER BY
句で指定されるソート順に依存します。
ORDER BY
の列だけを考慮した場合に重複する行はピアと呼ばれます。
4つの順位付け関数(cume_dist
を含む)は、すべてのピア行に対して同じ答えになるように定義されています。
Note that <function>first_value</function>, <function>last_value</function>, and
<function>nth_value</function> consider only the rows within the <quote>window
frame</quote>, which by default contains the rows from the start of the
partition through the last peer of the current row. This is
likely to give unhelpful results for <function>last_value</function> and
sometimes also <function>nth_value</function>. You can redefine the frame by
adding a suitable frame specification (<literal>RANGE</literal>,
<literal>ROWS</literal> or <literal>GROUPS</literal>) to
the <literal>OVER</literal> clause.
See <xref linkend="syntax-window-functions"/> for more information
about frame specifications.
first_value
、last_value
、nth_value
関数は「ウィンドウフレーム」内の行のみを考慮することに注意してください。
デフォルトで、ウィンドウフレームにはパーティションの先頭から現在の行の最終ピアまでの行が含まれます。
これはlast_value
、または時々nth_value
では有用ではない結果を得ることになりがちです。
OVER
句に適切なフレーム指定(RANGE
、GROUP
、もしくはROWS
)を加えることで、フレームを再定義することができます。
フレーム指定についての詳細は4.2.8を参照してください。
When an aggregate function is used as a window function, it aggregates
over the rows within the current row's window frame.
An aggregate used with <literal>ORDER BY</literal> and the default window frame
definition produces a <quote>running sum</quote> type of behavior, which may or
may not be what's wanted. To obtain
aggregation over the whole partition, omit <literal>ORDER BY</literal> or use
<literal>ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING</literal>.
Other frame specifications can be used to obtain other effects.
集約関数をウィンドウ関数として使用する場合、現在の行のウィンドウフレーム内の行に渡って集約処理を行います。
ORDER BY
および、デフォルトのウィンドウフレーム定義を使用した集約では、「中間和」のような動作を行います。これが望まれる場合もあれば、望まれない場合もあります。
パーティション全体に渡る集約処理を行うためには、ORDER BY
を省略するかROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
を使用してください。
他のフレーム指定を使用することで様々な結果を得ることができます。
The SQL standard defines a <literal>RESPECT NULLS</literal> or
<literal>IGNORE NULLS</literal> option for <function>lead</function>, <function>lag</function>,
<function>first_value</function>, <function>last_value</function>, and
<function>nth_value</function>. This is not implemented in
<productname>PostgreSQL</productname>: the behavior is always the
same as the standard's default, namely <literal>RESPECT NULLS</literal>.
Likewise, the standard's <literal>FROM FIRST</literal> or <literal>FROM LAST</literal>
option for <function>nth_value</function> is not implemented: only the
default <literal>FROM FIRST</literal> behavior is supported. (You can achieve
the result of <literal>FROM LAST</literal> by reversing the <literal>ORDER BY</literal>
ordering.)
標準SQLは、lead
、lag
、first_value
、last_value
、およびnth_value
に対しRESPECT NULLS
、またはIGNORE NULLS
オプションを定義します。
これはPostgreSQLに実装されていません。動作は常に標準のデフォルトと同一です。つまり、RESPECT NULLS
です。
同様にして、標準のnth_value
に対するFROM FIRST
、またはFROM LAST
オプションは実装されていません。デフォルトのFROM FIRST
動作のみに対応しています。
(ORDER BY
順序付けを逆に行うことで、FROM LAST
の結果を得ることができます。)