ホームページ >データベース >mysql チュートリアル >SQL 結合を使用してグループごとの最大値/最小値を効率的に見つけるにはどうすればよいですか?

SQL 結合を使用してグループごとの最大値/最小値を効率的に見つけるにはどうすればよいですか?

DDD
DDDオリジナル
2025-01-02 13:41:38516ブラウズ

How to Efficiently Find Max/Min Values per Group Using SQL Joins?

結合を使用したグループごとの最大値/最小値の取得

このソリューションでは、結合操作を使用して、指定された列の最大値または最小値を持つ行を取得します。

各グループごとに最も高い OrderField 値を持つ行を検索します。 group:

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;

グループ内で複数のレコードが同じ最大 OrderField 値を共有する場合、条件をさらに絞り込むことができます:

SELECT t1.*
FROM `Table` AS t1
LEFT OUTER JOIN `Table` AS t2
  ON t1.GroupId = t2.GroupId 
        AND (t1.OrderField < t2.OrderField 
         OR (t1.OrderField = t2.OrderField AND t1.Id < t2.Id))
WHERE t2.GroupId IS NULL

このアプローチにより、グループ内に同点がある場合、最大の OrderField 値を持つ行が返されます。

以上がSQL 結合を使用してグループごとの最大値/最小値を効率的に見つけるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。