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

SQL OVER()句-いつ、なぜそれが役立つのですか?

    できます GROUP BY SalesOrderIDを使用します 。違いは、GROUP BYを使用すると、GROUPBYに含まれていない列の集計値のみを取得できることです。

    対照的に、GROUP BYの代わりにウィンドウ集計関数を使用すると、集計値と非集計値の両方を取得できます。つまり、サンプルクエリではこれを行っていませんが、両方の個別のOrderQtyを取得できます。 同じSalesOrderIDのグループの値とその合計、カウント、平均など s。

    これは、ウィンドウ化された集計が優れている理由の実際的な例です。すべての値の合計の何パーセントかを計算する必要があるとします。ウィンドウ化された集計がない場合は、最初に集計値のリストを取得してから、元の行セットに結合する必要があります。つまり、次のようになります。

    SELECT
      orig.[Partition],
      orig.Value,
      orig.Value * 100.0 / agg.TotalValue AS ValuePercent
    FROM OriginalRowset orig
      INNER JOIN (
        SELECT
          [Partition],
          SUM(Value) AS TotalValue
        FROM OriginalRowset
        GROUP BY [Partition]
      ) agg ON orig.[Partition] = agg.[Partition]
    

    次に、ウィンドウ化された集計で同じことを行う方法を見てください。

    SELECT
      [Partition],
      Value,
      Value * 100.0 / SUM(Value) OVER (PARTITION BY [Partition]) AS ValuePercent
    FROM OriginalRowset orig
    

    はるかに簡単でクリーンですね。



    1. PostgreSQL9.5でintデータ型のサイズ制限を設定するにはどうすればよいですか?

    2. FROM_BASE64()関数がMySQLでどのように機能するか

    3. (+)=where句のoraclesqlの演算子

    4. PHP MYSQL UPDATEが存在する場合、またはINSERTが存在しない場合は?