ホームページ >データベース >mysql チュートリアル >SQL の GROUP BY を使用して各グループの上位 N 項目を効率的に取得するにはどうすればよいですか?
SQL グループ BY: 各グループの上位 N 項目の取得
SQL でデータを操作する場合、多くの場合、以下に基づいてレコードをグループ化する必要があります。共通の基準を使用して、各グループ内で計算または集計を実行します。ここで GROUP BY 句が登場します。この記事では、GROUP BY と ROW_NUMBER() 関数を組み合わせて、単一のクエリで各グループの上位 N 個のアイテムを効率的に取得する強力な手法について説明します。
問題: 店舗ごとの売れ筋アイテム
列 UPCCode、SaleDate、StoreId、および TotalDollarSales を含む Sales テーブルがあるシナリオを考えてみましょう。このタスクは、各店舗で売上上位 5 個の商品を特定することです。
クエリ:
UNION を使用して複数の個別のクエリを使用してこの問題にアプローチすることもできますが、そうではない可能性があります。効率的になる。代わりに、次のクエリはサブクエリと ROW_NUMBER() 関数を利用します。
WITH s AS ( SELECT StoreID, UPCCode, tds, rn = ROW_NUMBER() OVER (PARTITION BY StoreID ORDER BY tds DESC) FROM ( SELECT StoreID, UPCCode, tds = SUM(TotalDollarSales) FROM Sales GROUP BY StoreID, UPCCode ) AS s2 ) SELECT StoreID, UPCCode, TotalDollarSales = tds FROM s WHERE rn <= 5 ORDER BY StoreID, TotalDollarSales DESC;
説明:
結論:
この高度な SQL クエリを使用すると、各グループの上位 N 項目を効率的に収集し、一般的なデータ処理シナリオにエレガントに取り組み、機能を強化できます。クエリ最適化スキル。
以上がSQL の GROUP BY を使用して各グループの上位 N 項目を効率的に取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。