ホームページ > データベース > mysql チュートリアル > 単一の SQL SELECT ステートメントで DISTINCT と ORDER BY を併用するにはどうすればよいですか?

単一の SQL SELECT ステートメントで DISTINCT と ORDER BY を併用するにはどうすればよいですか?

Susan Sarandon
リリース: 2025-01-07 09:16:41
オリジナル
390 人が閲覧しました

How Can I Use DISTINCT and ORDER BY Together in a Single SQL SELECT Statement?

単一の SELECT ステートメントでの DISTINCT と ORDER BY の使用

SQL クエリを使用する場合、DISTINCT を使用して重複する値を削除し、次を使用して結果を並べ替えることの両方が望ましい場合があります。までに注文してください。ただし、これらの句を 1 つのステートメントで一緒に使用しようとすると、予期しない動作が発生する可能性があります。この記事では、この問題に対処し、フィルタリングと並べ替えの両方を適切に実現するための解決策を提供します。

問題ステートメント

次のクエリを考えてみましょう。

SELECT Category FROM MonitoringJob ORDER BY CreationDate DESC;
ログイン後にコピー

このクエリは次のクエリを返します。結果はCreationDate列の降順で並べられます。ただし、Category 列に重複した値がある場合、それらは削除されません。

重複を削除するには、DISTINCT キーワードを使用してみるとよいでしょう。

SELECT DISTINCT Category FROM MonitoringJob ORDER BY CreationDate DESC;
ログイン後にコピー

ただし、このクエリはDISTINCT が指定されている場合、非集計列では ORDER BY が許可されないため、エラーで失敗します。

解決策

この問題を解決するには、集計関数と GROUP BY 句を使用して、結果をカテゴリ列ごとにグループ化します。これにより、DISTINCT キーワードで重複するカテゴリ値を削除できると同時に、ORDER BY 句で CreationDate 列で結果を並べ替えることができます。

SELECT DISTINCT Category, MAX(CreationDate) 
FROM MonitoringJob 
GROUP BY Category 
ORDER BY MAX(CreationDate) DESC, Category;
ログイン後にコピー

このクエリ内:

  • MAX (CreationDate) は、各カテゴリの最新の CreationDate で結果を並べ替えるために使用される集計関数です。
  • GROUP BY カテゴリでは、結果がカテゴリ列ごとにグループ化され、DISTINCT で重複するカテゴリ値を削除できるようになります。
  • ORDER BY MAX(CreationDate) DESC、カテゴリでは、最初に各カテゴリ内の最新の作成日で結果を並べ替え、次にカテゴリでアルファベット順に並べ替えます。名前。

以上が単一の SQL SELECT ステートメントで DISTINCT と ORDER BY を併用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート