P粉6676492532023-08-23 09:25:35
使用するコードはできるだけ少なくしたいと思っています...
IN
を使用して達成できます
これを試して:###
リーリー
P粉5174756702023-08-23 09:14:22
###一目見ただけで...###
句で MAX
集計関数を使用するだけで済みます。
リーリー
物事は決して単純ではありませんね。
列も必要であることに今気づきました。
これは SQL で非常に一般的な問題です。特定のグループ化識別子に基づいて、列内の最大値に対応する完全なデータを見つけます。私のキャリアの中で、この質問をよく聞いてきました。実際、私は現在の職場での技術面接中にこれらの質問の 1 つに答えました。
この質問は実際に非常に一般的であるため、Stack Overflow コミュニティは特にこのタイプの問題に対処するためのタグ
greatest-n-per-groupを作成しました。 基本的に、この問題を解決するには 2 つの方法があります:
単純な
グループ識別子、グループ内の最大値を使用します
このアプローチでは、最初にサブクエリで (上ですでに解決済み) を見つけます。次に、等結合に group-identifier
と max-value-in-group
を使用して、テーブルをサブクエリと結合します。
リーリー
左結合に自己結合を使用し、接続条件とフィルタリング条件を調整します
2 番目の接続条件は、左側の値が右側の値より小さいことです。
であることに注意してください)。次に、結合結果をフィルタリングして、右側に
NULL を持つ行のみを表示します。
つまり、最終的には次のようになります: 同じ
max-value-in-group
を持つ 2 つの行がある場合、両方のメソッドの結果に両方の行が含まれます。
どちらの方法も SQL ANSI と互換性があるため、使用している RDBMS に関係なく、その「スタイル」に関係なく両方の方法を使用できます。
どちらの方法も非常に効率的ですが、具体的な効果は異なる場合があります (RDBMS、データベース構造、インデックスなど)。したがって、これらの方法のいずれかを選択する場合は、
ベンチマーク