リレーショナル データベースでグループごとの最大値を持つ行を効率的に取得するにはどうすればよいですか?
リレーショナル データベースのグループ内の最大値を効率的に見つける
リレーショナル データベース内でグループの整合性を維持しながら、特定の列の最大値を含む行を抽出するのは複雑な場合があります。この記事では、クエリ効率を優先して、一意の ID ごとに最大のラウンド番号を持つ行を取得するという課題に取り組みます。
1 つのメソッドはサブクエリを使用します。
SELECT * FROM (SELECT id, round, CASE WHEN (MAX(round) OVER (PARTITION BY id)) = round THEN score ELSE NULL END score FROM SCORES where id in (1,2,3) ) scorevals WHERE scorevals.round is not null;
ただし、このアプローチは、後処理のフィルタリング手順により非効率的です。
パフォーマンスを向上させるには、ウィンドウ関数の使用を検討してください。
SELECT DISTINCT id ,max(round) OVER (PARTITION BY id) AS round ,first_value(score) OVER (PARTITION BY id ORDER BY round DESC) AS score FROM SCORES WHERE id IN (1,2,3) ORDER BY id;
このクエリは、ウィンドウ関数を使用して各 ID の最大ラウンドを決定し、対応するスコアを取得します。 DISTINCT
キーワードにより、ID ごとに 1 行が確保されます。
同じウィンドウ関数を 2 回使用する、より高速になる可能性のある代替案:
SELECT DISTINCT id ,first_value(round) OVER (PARTITION BY id ORDER BY round DESC) AS round ,first_value(score) OVER (PARTITION BY id ORDER BY round DESC) AS score FROM SCORES WHERE id IN (1,2,3) ORDER BY id;
どちらの最適化されたソリューションも不必要なフィルタリングを回避し、サブクエリのアプローチと比較してクエリの実行時間が短縮されます。
以上がリレーショナル データベースでグループごとの最大値を持つ行を効率的に取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











Alter Tableステートメントを使用してMySQLのテーブルをどのように変更しますか?

Linuxでmysqlを実行します(phpmyAdminを使用してポッドマンコンテナを使用して/なし)

MACOSで複数のMySQLバージョンを実行する:ステップバイステップガイド

人気のあるMySQL GUIツール(MySQL Workbench、PhpMyAdminなど)は何ですか?

MySQL接続用のSSL/TLS暗号化を構成するにはどうすればよいですか?
