ホームページ >データベース >mysql チュートリアル >SQL の GROUP BY 句を使用して各グループの上位 N 項目を取得するにはどうすればよいですか?

SQL の GROUP BY 句を使用して各グループの上位 N 項目を取得するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-19 07:24:13867ブラウズ

How to Get the Top N Items for Each Group Using SQL's GROUP BY Clause?

SQL Group By を使用した各グループの上位 N 項目

データベースでは、テーブル内の行をグループ化するために GROUP BY 句が使用されます。 1 つ以上の列の共通の値に基づきます。 SUM() などの集計関数と組み合わせると、各グループの統計を計算するために使用できます。ただし、場合によっては、各グループ内の上位 N 個のアイテムを抽出する必要がある場合があります。

この問題に対する 1 つのアプローチは、サブクエリを使用して各店舗の各アイテムの合計売上高を計算し、ランク付けすることです。各店舗内にあります。これは、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
)

サブクエリは、StoreID、UPCCode、tds (合計) の 3 つの列を持つ新しいテーブルを作成します。ドル売り)。また、ストア内の各行にランキングを与えるランキング列 rn も含まれています。ランキングは ROW_NUMBER() 関数を使用して生成され、StoreID 列によって分割されます。

各ストアの売上上位 5 品目を抽出するには、次のクエリを使用できます:

SELECT StoreID, UPCCode, TotalDollarSales = tds
FROM s
WHERE rn <= 5
ORDER BY StoreID, TotalDollarSales DESC;

このクエリは、rn 値が 5 以下であるすべての行を s テーブルから選択します。結果は、各行内で TotalDollarSales の降順で並べ替えられます。 店。その結果、出力には、Sales テーブルの各店舗の上位 5 件の販売品目が含まれます。この方法では、GROUP BY、集計関数、ランキングの使用を組み合わせて、単一のクエリで要求されたデータを効率的に取得します。

以上がSQL の GROUP BY 句を使用して各グループの上位 N 項目を取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。