ホームページ >データベース >mysql チュートリアル >「GROUP BY」と「ORDER BY」を併用して、MySQL でデータを効率的にグループ化し、順序付けするにはどうすればよいですか?
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」と「ORDER BY」を併用して、MySQL でデータを効率的にグループ化し、順序付けするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。