sql >> データベース >  >> RDS >> Sqlserver

TSQL OVER 句:COUNT(*) OVER (ORDER BY a)

    現在の合計が表示されます (この機能は、バージョン 2012 まで SQL Server に実装されていませんでした)。 .)

    ORDER BY UNBOUNDED PRECEDING で集約されるウィンドウを定義します および CURRENT ROW 指定しない場合のデフォルトです。 SQL Server のデフォルトは パフォーマンスが低い RANGE ROWS ではなくオプション .

    RANGE のウィンドウが同点の場合、それらは異なるセマンティクスを持ちます。 version には、現在の行 (および前の行) だけでなく、同じ a の値を持つ追加の関連付けられた行も含まれます 現在の行として。これは、以下の結果でそれぞれがカウントした行数で確認できます。

    SELECT  a, 
            b,
            COUNT(*) OVER (ORDER BY a 
                             ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS  [Rows],
            COUNT(*) OVER (ORDER BY a 
                             RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS [Range],
            COUNT(*) OVER() AS [Over()]
        FROM    t;
    

    返品

    a        b        Rows        Range       Over()
    -------- -------- ----------- ----------- -----------
    NULL     NULL     1           4           12
    NULL     NULL     2           4           12
    NULL     NULL     3           4           12
    NULL     NULL     4           4           12
    a        b        5           7           12
    a        b        6           7           12
    a        b        7           7           12
    c        d        8           11          12
    c        d        9           11          12
    c        d        10          11          12
    c        d        11          11          12
    e        NULL     12          12          12
    

    期待どおりの結果を得るには、両方を省略してください PARTITION BY および ORDER BY 空の OVER() を使用します 節 (上にも示されています)。



    1. php&mysqlのサブメニューで動的メニューを作成する方法

    2. PostgreSQLで月ごとにグループ化する方法

    3. MySQLユーザーアクセス-テーブル固有

    4. Rのdata.frameからの値でデータベースの行を条件付きで更新する方法