P粉6383439952023-08-24 09:47:12
私の好みは、使用するコードをできるだけ少なくすることです...
IN
を使用してこれを行うことができます
これを試して:###
リーリー
P粉5174756702023-08-24 09:16:15
###一目見ただけで...###
集計関数を含む GROUP BY
句だけです:
リーリー
物事は決して単純ではありませんね。
列も必要であることに今気づきました。
これは SQL で非常に一般的な問題です。各グループ識別子の列に最大値がある行のすべてのデータを検索します。私のキャリアの中で、この言葉をよく聞きます。実際、これは私が現在の職場での技術面接で答えた質問の 1 つです。
実際、Stack Overflow コミュニティは、次のような質問に対処するためのタグを作成しました:
greatest-n-per-group。 基本的に、この問題を解決するには 2 つの方法があります:
単純な
グループ識別子、グループ内の最大値を使用する
このアプローチでは、まずサブクエリ内で (上記で解決済み) を見つけます。次に、テーブルをサブクエリに結合し、group-identifier
と max-value-in-group
を等しくします。
リーリー
self との結合を解除し、接続条件とフィルターを調整します
には等価性が存在します。次に、2 つの賢い方法:
LEFT JOIN
です、覚えていますか?)。次に、結合結果をフィルタリングして、右側に NULL を含む行のみを表示します。
どちらの方法でもまったく同じ結果が得られます。
と
max-value-in-group がある場合、両方の行が両方のメソッドの結果に表示されます。
どちらの方法も SQL ANSI と互換性があるため、「フレーバー」に関係なく、お気に入りの RDBMS で動作します。
どちらのアプローチもパフォーマンスに優れていますが、状況は異なる場合があります (RDBMS、データベース構造、インデックスなど)。したがって、ある方法を別の方法より選択する場合は、
になります。そして、自分にとって最も意味のあるものを選択してください。