P粉9094764572023-08-22 12:49:52
使用するコードはできるだけ少なくしたいと思っています...
IN
を使用して達成できます
これを試して:###
リーリー
P粉2873452512023-08-22 09:59:35
###一目見ただけで...###
句と 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、データベース構造、インデックスなど)。したがって、これらの方法のいずれかを選択する場合は、
ベンチマーク