<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                [TOC] # WINDOW FUNCTION WINDOW FUNCTION 算子用于實現 SQL 中的分析函數(也叫窗口函數),計算窗口下的相關行的結果。 窗口函數與聚集函數不同的是,聚集函數一組只能返回一行,而窗口函數每組可以返回多行,組內每一行都是基于窗口的邏輯計算的結果。因此,在執行含有 WINDOW FUNCTION 的 SQL 時 (格式一般為`OVER(...)`),都會在生成執行計劃的時候分配一個 WINDOW FUNCTION 算子。 示例:含 WINDOW FUNCTION 算子的執行計劃 ~~~ obclient>CREATE TABLE t1(c1 INT, c2 INT); Query OK, 0 rows affected (0.12 sec) obclient>INSERT INTO t1 VALUES(1, 1); Query OK, 1 rows affected (0.12 sec) obclient>INSERT INTO t1 VALUES(2, 2); Query OK, 1 rows affected (0.12 sec) obclient>INSERT INTO t1 VALUES(3, 3); Query OK, 1 rows affected (0.12 sec) Q1: obclient>EXPLAIN SELECT MAX(c1) OVER(PARTITION BY c1 ORDER BY c2) FROM t1\G; *************************** 1. row *************************** Query Plan: | ======================================== |ID|OPERATOR |NAME|EST. ROWS|COST| ---------------------------------------- |0 |WINDOW FUNCTION| |3 |45 | |1 | SORT | |3 |44 | |2 | TABLE SCAN |T1 |3 |37 | ======================================== Outputs & filters: ------------------------------------- 0 - output([T_FUN_MAX(T1.C1)]), filter(nil), win_expr(T_FUN_MAX(T1.C1)), partition_by([T1.C1]), order_by([T1.C2, ASC]), window_type(RANGE), upper(UNBOUNDED PRECEDING), lower(CURRENT ROW) 1 - output([T1.C1], [T1.C2]), filter(nil), sort_keys([T1.C1, ASC], [T1.C2, ASC]) 2 - output([T1.C1], [T1.C2]), filter(nil), access([T1.C1], [T1.C2]), partitions(p0) ~~~ 其中,窗口函數中指定了一個 ORDER BY/PARTITION BY 的時候,會在下層分配一個 SORT 算子,將排序結果返回給窗口函數算子使用。 上述示例中,Q1 查詢的執行計劃展示中的 outputs & filters 詳細列出了 WINDOW FUNCTION 算子的輸出信息如下: <table data-tag="table" id="table-5ga-h0g-i98" class="table"><colgroup span="1" width="140" data-tag="col" id="col-rxu-5a6-cjf" colwidth="1*" colnum="1" colname="col1" style="width:50%" class="col"></colgroup><colgroup span="1" width="606" data-tag="col" id="col-1yz-eq1-fct" colwidth="1*" colnum="2" colname="col2" style="width:50%" class="col"></colgroup><thead id="thead-t5d-08w-d0r" class="thead"><tr id="tr-pb8-ytr-3uc"><th id="td-79l-2f4-x6f"><p id="p-vem-1h6-ba6"><b>信息名稱</b></p></th><th id="td-4d6-dew-nwy"><p id="p-u8g-npj-oge"><b>含義</b></p></th></tr></thead><tbody data-tag="tbody" id="tbody-zqr-mca-y11" class="tbody"><tr data-tag="tr" id="tr-0ns-3wh-tey" class="tr"><td data-tag="td" id="td-zht-y4d-lja" class="td"><p id="p-mpt-2dm-zgk">output</p></td><td data-tag="td" id="td-1de-d2i-y1e" class="td"><p id="p-48c-jf1-htr">該算子輸出的表達式。</p></td></tr><tr data-tag="tr" id="tr-124-57x-t57" class="tr"><td data-tag="td" id="td-08r-a3l-nun" class="td"><p id="p-3v4-w84-ws7">filter</p></td><td data-tag="td" id="td-uee-3mt-sfd" class="td"><p id="p-jk1-8f2-b5i">該算子上的過濾條件。</p><p id="p-vy2-7ut-9xn">由于示例中 WINDOW FUNCTION 算子沒有設置 filter,所以為 nil。</p></td></tr><tr data-tag="tr" id="tr-nqr-pxn-fuz" class="tr"><td data-tag="td" id="td-277-qvw-nde" class="td"><p data-tag="p" id="p-0m9-cdd-79g" class="p">win_expr</p></td><td data-tag="td" id="td-4jn-mfq-gv5" class="td"><p data-tag="p" id="p-qml-5nz-xee" class="p">在窗口中使用何種聚合函數。</p><p data-tag="p" id="p-flu-1fz-if9" class="p">例如,Q1 查詢為求 c1 列的最大值,因此為<code data-tag="code" class="code">T_FUN_MAX(t1.c1)</code>。</p></td></tr><tr data-tag="tr" id="tr-3rj-7mu-kpd" class="tr"><td data-tag="td" id="td-cya-izy-zp6" class="td"><p data-tag="p" id="p-tdy-qp9-u0y" class="p">partition_by</p></td><td data-tag="td" id="td-85m-cjl-r9c" class="td"><p data-tag="p" id="p-gek-72k-80p" class="p">在窗口中按照何種方式分組。</p><p data-tag="p" id="p-nn4-5pw-tcc" class="p">例如,Q1 查詢為按照 c1 列分組,因此為 <code data-tag="code" class="code">t1.c1</code>。</p></td></tr><tr data-tag="tr" id="tr-7if-p4x-0mv" class="tr"><td data-tag="td" id="td-uw4-4eq-kqa" class="td"><p data-tag="p" id="p-lad-1nw-4f4" class="p">order_by</p></td><td data-tag="td" id="td-0cn-19z-ut6" class="td"><p data-tag="p" id="p-jix-hs3-fad" class="p">在窗口中按照何種方式排序。</p><p data-tag="p" id="p-zhm-lmz-wi8" class="p">例如,Q1 查詢為按照 c2 列排序,因此為 <code data-tag="code" class="code">t1.c2</code>。</p></td></tr><tr data-tag="tr" id="tr-kz3-4ow-5fg" class="tr"><td data-tag="td" id="td-vvq-cn9-heb" class="td"><p data-tag="p" id="p-odm-fqu-ow0" class="p">window_type</p></td><td data-tag="td" id="td-o08-1v8-2w8" class="td"><p data-tag="p" id="p-mdg-lwn-259" class="p">窗口類型,包括 range 和 rows 兩種:</p><ul id="ul-8cd-krc-8de"><li id="li-449-8r3-nwp"><p data-tag="p" id="p-ece-5jm-e7u" class="p">range :按照邏輯位置偏移進行計算窗口上下界限,默認使用 range 方式。</p></li><li id="li-dbe-mfu-iw2"><p data-tag="p" id="p-t1r-1ha-aca" class="p">rows :按照實際物理位置偏移進行計算窗口上下界限。</p></li></ul><p data-tag="p" id="p-4im-llg-xl3" class="p">例如,Q1 查詢未設置窗口類型,因此選擇了默認方式 range。</p></td></tr><tr data-tag="tr" id="tr-n5t-bci-oks" class="tr"><td data-tag="td" id="td-ict-0wr-4ut" class="td"><p id="p-hmu-0t3-sf5">upper</p></td><td data-tag="td" id="td-m16-eru-76d" class="td"><p data-tag="p" id="p-td0-3v1-g05" class="p">設定窗口的上邊界:</p><ul lake-indent="0" data-tag="ul" id="ul-58c-qi9-lbd" class="ul"><li data-tag="li" id="li-mp9-cxr-08m" class="li"><p id="p-cmb-fb9-a5w">UNBOUNDED :無邊界,選擇最大的值(默認)。</p></li><li data-tag="li" id="li-ih2-ns5-9r7" class="li"><p id="p-53z-998-24u">CURRENT ROW :從當前行開始,如果出現數字則表示移動的行數。</p></li><li data-tag="li" id="li-btb-10v-275" class="li"><p id="p-wsu-u8h-or8">PRECEDING :向前取邊</p></li><li data-tag="li" id="li-xem-cgl-cyx" class="li"><p id="p-thv-ckg-etb">FOLLOWING:向后取邊界。</p></li></ul><p data-tag="p" id="p-p5o-7zx-x77" class="p">例如,Q1 查詢設置的上邊界為向前無邊界。</p></td></tr><tr data-tag="tr" id="tr-sjx-9wn-nwi" class="tr"><td data-tag="td" id="td-2mq-ns0-hrm" class="td"><p id="p-riz-mm6-84i">lower</p></td><td data-tag="td" id="td-v1y-syf-h8g" class="td"><p id="p-u3t-3a8-mwr">設定窗口的下邊界,邊界屬性設置同 upper。</p><p id="p-127-k3y-1bd">例如,Q1 查詢設置的下邊界為當前行。</p></td></tr></tbody></table>
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看