ホームページ >データベース >mysql チュートリアル >「GROUP BY」と「ORDER BY」を併用して、MySQL でデータを効率的にグループ化し、順序付けするにはどうすればよいですか?

「GROUP BY」と「ORDER BY」を併用して、MySQL でデータを効率的にグループ化し、順序付けするにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-12 14:11:47972ブラウズ

How Can I Efficiently Group and Order Data in MySQL Using

MySQL データのグループ化と並べ替え: GROUP BY と ORDER BY の賢い使用法

データベース管理では、データの編成と検索が非常に重要です。 MySQL の「Group By」句と「Order By」句は、データのグループ化と並べ替えのための強力なツールですが、これらを組み合わせて使用​​すると問題が発生する場合があります。

問題分析

電子メール レコードを送信者ごとにグループ化し、電子メール レコードをタイムスタンプによって降順に並べ替える必要があるとします。ただし、結果内の各送信者の件名が最新ではない場合があります。

解決策: サブクエリと並べ替え

この問題を解決するには、サブクエリを使用して最初に行の順序を変更し、次に行をグループ化します。

<code class="language-sql">SELECT *
FROM (
    SELECT timestamp, fromEmail, subject
    FROM incomingEmails
    ORDER BY timestamp DESC
) AS tmp_table
GROUP BY LOWER(fromEmail)</code>

このクエリは、まずサブクエリでタイムスタンプの降順でレコードを並べ替えます。次に、メイン クエリはサブクエリの結果を使用して、電子メール アドレスごとにレコードをグループ化します。これにより、各送信者の選択されたレコードが最新のタイムスタンプを表すことが保証されます。

グループ化で非集計列の使用を避ける

GROUP BY 句を使用する場合、SELECT リストで非集計カラム (件名やタイムスタンプなど) を使用するのは標準的な MySQL の慣行ではないことに注意することが重要です。これは古いバージョンでは機能する可能性がありますが、新しいバージョンでは MySQL がグループから任意の値を選択する可能性があり、結果が非​​決定的になります。

ベストプラクティス

一貫した結果を保証し、潜在的なエラーを回避するには、次のことをお勧めします。

  • GROUP BY 句を使用する場合は、SELECT リストに必ず集計関数 (MAX() や SUM() など) を含めてください。
  • MySQL 5.7 で導入された ANY_VALUE() 関数を使用して、グループからランダムな値を選択します。
  • GROUP BY と ORDER BY の使用に関する最新のガイダンスと更新については、MySQL 公式ドキュメントを参照してください。

以上が「GROUP BY」と「ORDER BY」を併用して、MySQL でデータを効率的にグループ化し、順序付けするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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