ホームページ >データベース >mysql チュートリアル >単一の SQL クエリを使用して店舗ごとの売上上位 N 個のアイテムを取得するにはどうすればよいですか?

単一の SQL クエリを使用して店舗ごとの売上上位 N 個のアイテムを取得するにはどうすればよいですか?

DDD
DDDオリジナル
2024-12-21 12:50:11258ブラウズ

How to Retrieve the Top N Sold Items per Store Using a Single SQL Query?

グループごとに販売された上位 N 個のアイテムを取得する SQL クエリ

この質問では、ユーザーは、販売された上位 5 個のアイテムを取得する SQL クエリを求めています単一のクエリで各ストアのアイテムを取得できます。提供されたテーブル Sales には、UPCCode、SaleDate、StoreId、TotalDollarSales などの列が含まれています。

目的の結果を達成するために、単一の SQL クエリ内でサブクエリとパーティショニングの組み合わせを利用できます。詳細な内訳は次のとおりです:

  1. 各 UPCCode の売上の合計を計算するサブクエリ:

    • それぞれの一意の TotalDollarSales の合計を計算します。 StoreId とUPCCode.
  2. 分割された結果に行番号を追加:

    • 結果を StoreId で分割し、行番号を割り当てます。各行は降順でTotalDollarSales.
  3. 各ストアの上位 N アイテムを選択:

    • 行が含まれる行のみを含むように結果をフィルターします。数値は 5 以下です。これにより、各項目の上位 5 項目が提供されます。 store.
  4. 最終結果の取得:

    • 上位 5 項目の StoreId、UPCCode、および TotalDollarSales を選択します。それぞれstore.

これらの手順を組み合わせた完全な SQL クエリは次のとおりです。

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 個のアイテムを取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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