ホームページ >データベース >mysql チュートリアル >SQL でグループごとに最高値または最低値を持つレコードを効率的に取得するにはどうすればよいですか?
グループごとの最大/最小値を持つレコードの取得
問題:
レコードの取得各フィールド内の指定されたフィールドの最大値または最小値group.
以前に提案されたソリューション:
サブクエリを含む複雑なクエリでのランク (@rank := @rank 1) の使用。
代替解決策:
より効率的なアプローチは、ランキング変数を使用しない左外部結合:
SELECT t1.* FROM `Table` AS t1 LEFT OUTER JOIN `Table` AS t2 ON t1.GroupId = t2.GroupId AND t1.OrderField < t2.OrderField WHERE t2.GroupId IS NULL ORDER BY t1.OrderField;
このクエリは、(GroupId, OrderField) のインデックス付け戦略を利用して t2 へのアクセスを最適化することで、望ましい結果を達成します。
最適化考慮事項:
AND (t1.OrderField < t2.OrderField OR (t1.OrderField = t2.OrderField AND t1.Id < t2.Id))
左外部結合アプローチの利点:
以上がSQL でグループごとに最高値または最低値を持つレコードを効率的に取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。