ホームページ >データベース >mysql チュートリアル >SQL で最大値と対応するデータを効率的に取得するにはどうすればよいですか?

SQL で最大値と対応するデータを効率的に取得するにはどうすればよいですか?

DDD
DDDオリジナル
2025-01-07 17:17:09302ブラウズ

How Can I Efficiently Retrieve Maximum Values and Corresponding Data in SQL?

SQL クエリの最適化: 最大値と関連データの取得

この記事では、大規模な SQL テーブルから各 ID とそれに対応するタグの最大バージョン番号を取得する効率的な方法を説明します。 ネストされたクエリや単純なグループ化など、効率性の低い方法は避けてください。

最適解は ROW_NUMBER() 関数を使用します:

<code class="language-sql">SELECT s.id, s.tag, s.version
FROM (
    SELECT t.*,
           ROW_NUMBER() OVER(PARTITION BY t.id ORDER BY t.version DESC) AS rnk
    FROM YourTable t
) s
WHERE s.rnk = 1;</code>

このクエリの仕組みは次のとおりです:

  • 内部クエリ: これにより、t.* からすべての列 (YourTable) が選択されます (YourTable を実際のテーブル名に置き換えます)。 重要なのは、各 rnk パーティション内の各行にランク (id) を version の降順で割り当てます。 各 version の最高の id には 1 のランクが与えられます。
  • 外部クエリ: これは、内部クエリの結果をフィルター処理し、rnk = 1 である行のみを選択します。 これにより、一意の各 version の最大 id とそれに関連付けられた tag および id が効率的に分離されます。

を使用すると、特に大規模なデータセットの場合、他のアプローチに比べてパフォーマンスが大幅に向上します。 これにより、ネストされたクエリや集計関数を使用した ROW_NUMBER() 句のパフォーマンスのオーバーヘッドが回避され、このシナリオで効率的なデータ取得に推奨される方法になります。GROUP BY

以上がSQL で最大値と対応するデータを効率的に取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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