同一 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 サイトの他の関連記事を参照してください。