ウィンドウ関数の場合、GROUP BY句には、以下のものに指定されている列がすべて含まれていなければなりません。
- SELECT句の選択リスト
- SELECT句の選択リストのウィンドウ関数
- QUALIFY句の検索条件のウィンドウ関数
- RESET WHEN句内の条件
例えば、次のSELECT文の場合、選択リストの中で列Cityが指定されており、選択リストのCOUNTウィンドウ関数の中とQUALIFY句の中で列StoreIDが指定されています。どちらの列も、GROUP BY句でも指定されています。
SELECT City, StoreID, COUNT(StoreID) OVER () FROM sales_tbl GROUP BY City, StoreID QUALIFY COUNT(StoreID) >=3;
ウィンドウ関数の場合、GROUP BYはgroup-by列に同じ値が入っているすべての行を1つの行に圧縮します。
例えば、次の文ではGROUP BY句を使用することにより、CityとStoreIDが同じ値の行をすべて1つの行に圧縮します。
SELECT City, StoreID, COUNT(StoreID) OVER () FROM sales_tbl GROUP BY City, StoreID;
結果は次のようになります。
City StoreID Group Count(StoreID) ----- ------- -------------------- Pecos 1001 3 Pecos 1002 3 Ozona 1003 3
GROUP BYを使用しない場合の結果は次のようになります。
City StoreID Group Count(StoreID) ----- ------- -------------------- Pecos 1001 9 Pecos 1001 9 Pecos 1001 9 Pecos 1001 9 Pecos 1002 9 Pecos 1002 9 Pecos 1002 9 Ozona 1003 9 Ozona 1003 9