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

OrderByを使用してパーティション内の行をカウントします

    order byを追加する場合 アグリゲートが「実行カウント」(または使用するアグリゲート)に変わるウィンドウ関数として使用されるアグリゲートに。

    count(*) 指定された順序に基づいて、「現在の行」までの行数を返します。

    次のクエリは、order byで使用される集計のさまざまな結果を示しています。 。 sum()を使用 count()の代わりに (私の意見では)少し見やすくなっています。

    with test (id, num, x) as (
      values 
        (1, 4, 1),
        (2, 4, 1),
        (3, 5, 2),
        (4, 6, 2)
    )
    select id, 
           num,
           x,
           count(*) over () as total_rows, 
           count(*) over (order by id) as rows_upto,
           count(*) over (partition by x order by id) as rows_per_x,
           sum(num) over (partition by x) as total_for_x,
           sum(num) over (order by id) as sum_upto,
           sum(num) over (partition by x order by id) as sum_for_x_upto
    from test;
    

    結果は次のようになります:

    id | num | x | total_rows | rows_upto | rows_per_x | total_for_x | sum_upto | sum_for_x_upto
    ---+-----+---+------------+-----------+------------+-------------+----------+---------------
     1 |   4 | 1 |          4 |         1 |          1 |           8 |        4 |              4
     2 |   4 | 1 |          4 |         2 |          2 |           8 |        8 |              8
     3 |   5 | 2 |          4 |         3 |          1 |          11 |       13 |              5
     4 |   6 | 2 |          4 |         4 |          2 |          11 |       19 |             11
    

    Postgresマニュアル には他にも例があります。



    1. PHPを使用してmysqlデータベースからデータをフェッチする方法

    2. SQL Server 2008 に接続できませんか?

    3. CURDATE()の日付値を完全なタイムスタンプフィールドと比較する

    4. 別の列の値で列を更新する