ホームページ > データベース > mysql チュートリアル > データベーステーブル内の同一IDの最大値を効率的に取得するにはどうすればよいですか?

データベーステーブル内の同一IDの最大値を効率的に取得するにはどうすればよいですか?

Susan Sarandon
リリース: 2025-01-06 12:42:40
オリジナル
177 人が閲覧しました

How to Efficiently Retrieve the Maximum Value for Identical IDs in a Database Table?

同一 ID の最大値クエリ

同じ ID を共有する複数のレコードを持つテーブルでは、次のことが必要なシナリオが発生する場合があります。各IDの最大値を取得します。これを実現するクエリは次のとおりです。

サブクエリのアプローチ:

select cur.id, cur.signal, cur.station, cur.ownerid
from yourtable cur
where not exists (
    select *
    from yourtable high
    where high.id = cur.id and high.signal > cur.signal
)
ログイン後にコピー

このクエリは、"NOT EXISTS" 句を含むサブクエリを使用して、上位の行をすべて除外します。現在の行よりも信号が大きくなります。これにより、IDごとに信号が最大となる行を選択します。潜在的な欠点は、同じ最大値を持つ ID の複数の行をリストできることです。

外部結合アプローチ:

代替アプローチは、外部結合を使用することです。 self-join:

select a.id, a.signal, a.station, a.ownerid
from yourtable a
left join yourtable b on a.id = b.id and a.signal < b.signal
where b.id is null
ログイン後にコピー

このクエリは、外部結合を使用して、上位シグナルを含まない行を検索します。結合された行の null 値をチェックする条件を適用することにより、信号が低い行がフィルターで除外されます。このアプローチでは、ID ごとに最大のシグナルを持つ 1 つの行が保証されます。

例:

提供されたテーブルを使用すると、クエリは次の結果を返します。

サブクエリアプローチ:

ID Signal Station OwnerID
111 -120 Home 1
222 -95 Work 1

外部結合アプローチ:

ID Signal Station OwnerID
111 -120 Home 1
222 -95 Work 1

結論:

両方のアプローチで達成各 ID の最大信号値を取得するという同じ目標です。サブクエリのアプローチは、小さなデータセットの場合はより効率的ですが、外部結合のアプローチは、特に同一の信号を持つ複数の行がある場合、より大きなデータセットの場合により効率的です。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート