グループ化されたクエリでのGROUP BYの使用とSQL実行順序の説明

グループ化されたクエリでのGROUP BYの使用とSQL実行順序の説明

SQL では、GROUP BY は SELECT の結果のデータをグループ化するために使用されます。GROUP BY を使用する前に、いくつかの重要なルールを知っておく必要があります。

  • 1. GROUP BY 句には任意の数の列を含めることができます。つまり、グループ内でデータをグループ化できるため、データのグループ化をより詳細に制御できます。
  • 2. GROUP BY 句で複数のグループを指定した場合、データは最後に指定したグループで集計されます。
  • 3. GROUP BY 句にリストされている各列は、検索列または有効な式 (集計関数ではない) である必要があります。 SELECT で式を使用する場合は、GROUP BY 句で同じ式を指定する必要があります。エイリアスは使用できません。
  • 4. 集計計算ステートメントを除き、SELECT ステートメントの各列は GROUP BY 句で指定する必要があります。
  • 5. グループ化列に NULL 値がある場合、グループとして NULL が返されます。 NULL 値を持つ行が複数ある場合は、それらはグループ化されます。
  • 6. GROUP BY 句は、WHERE 句の後、ORDER BY 句の前に配置する必要があります。

フィルターグループ

グループ化のための HAVING 句の過剰な使用。 HAVING 句はすべての WHERE 操作をサポートします。 HAVING と WHERE の違いは、WHERE は行をフィルタリングするのに対し、HAVING はグループをフィルタリングするために使用されることです。

WHERE と HAVING の違いを理解するもう 1 つの方法は、WHERE はグループ化の前にフィルタリングするのに対し、HAVING はグループ化後にグループごとにフィルタリングすることです。

グループ化と並べ替え

通常、GROUP BY 句を使用する場合は、ORDER BY 句も使用する必要があります。これが、データが正しくソートされることを保証する唯一の方法です。

SQL SELECT ステートメントの実行順序は次のとおりです。

  • 1. from 句はさまざまなデータ ソースからデータを組み立てます。
  • 2. where 句は指定された条件に基づいて行をフィルタリングします。
  • 3. group by 句はデータを複数のグループに分割します。
  • 4. 計算には集計関数を使用します。
  • 5. グループをフィルタリングするには、having 句を使用します。
  • 6. すべての式を計算します。
  • 7. order by を使用して結果セットを並べ替えます。
  • 8. コレクション出力を選択します。

例を挙げてみましょう。

候補者名、最大(合計スコア)をtb_Gradeから最大合計スコアとして選択します
候補名がnullではない
最大(合計スコア)が600を超える候補者名でグループ化
合計スコアの最大値で並べ替え

上記の例では、SQL ステートメントは次の順序で実行されます。

  • 1. まず、FROM句を実行してtb_Gradeテーブルからデータソースデータを組み立てます。
  • 2. WHERE句を実行して、tb_Gradeテーブル内のNULL以外のすべてのデータをフィルタリングします。
  • 3. GROUP BY句を実行して、tb_Gradeテーブルを「生徒名」列でグループ化します。
  • 4. max()集計関数を計算し、「合計スコア」に従って合計スコアの最大値を見つけます。
  • 5. HAVING 句を実行して、合計スコアが 600 ポイントを超えるコースをフィルターします。
  • 6. ORDER BY 句を実行し、最終結果を「最大スコア」で並べ替えます。

注意: join と on が使用されている場合、where の前に on が実行され、次に join が実行され、最後に where が実行されます。

添付ファイル:

MySQL の集計関数:

  • 1. count()は列内の行数を返します
  • 2. avg()は列の平均値を返します
  • 3. max()は列の最大値を返します
  • 4. min()は列の最小値を返します
  • 5. sum()は列の合計を返します
  • 6. distinctは重複した値を削除します

注: avg() は null 値の行を無視し、count(*) はすべての行をカウントし、count(column) は null 値の行を無視します。

要約する

以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。これについてもっと知りたい場合は、次のリンクをご覧ください。

以下もご興味があるかもしれません:
  • SQL での Group By の使用に関する詳細なチュートリアル
  • Laravel は Eloquent モデル グループ クエリを実装し、各グループの数を返します groupBy()
  • Django ORM 集計クエリとグループクエリの実装の詳細
  • MySQLグループクエリGroup Byの実装原理の詳細な説明
  • MySQL のグループクエリと結合クエリステートメントの詳細な説明
  • SQL グループクエリの問題
  • Oracle グループクエリにおける group by の使用ルールの詳細な説明

<<:  Linux 上での MySQL データベースのインストールと Java プロジェクトの構成に関する詳細なグラフィック説明

>>:  JavaScript の遅延読み込み属性パターンに関する簡単な説明

推薦する

Dockerで同じIDを持つ2つのイメージを削除する

今日 Docker コンテナを作成したとき、誤ってイメージの名前を間違って入力しました。その結果、コ...

知っておくべき JS 配列削減の高度な使い方 25 選

序文Reduce は ES5 で追加された新しい従来の配列メソッドの 1 つです。forEach、f...

iframeをカプセル化するvueコンポーネントを開発する

目次1. コンポーネントの紹介2. コンポーネントの内部構造とロジック1. コード組織構造2. マッ...

メタタグのビューポートはデバイス画面のCSSを制御します

コードをコピーコードは次のとおりです。 <meta name="viewport&q...

JS でシンプルな画像カルーセル効果を実現

この記事では、シンプルな画像カルーセル効果を実現するためのJSの具体的なコードを参考までに紹介します...

MySQLはフィールドからカンマ区切りの値を取り出して新しいフィールドを形成します

1例: 図1のフィールドを図2に分割するには アカウントIDを選択、 サブストリングインデックス(サ...

新しいウィンドウで開くジャンプメニュー、window.open の使い方の紹介

コードをコピーコードは次のとおりです。 <前> <div> <sele...

Linux での SELinux を理解する方法

目次1. SELinux の紹介2. SELinuxの基本概念2.1 仕事の種類2.2. セキュリテ...

Mysql での結合操作

結合の種類1. 内部結合: 結合関係を持つ 2 つのテーブル内のフィールドは、結合関係を満たすレコー...

Vue Routerはバックグラウンドデータに応じて異なるコンポーネントをロードします

目次実際のプロジェクトで遭遇する要件実装が間違っているところもある私は個人的に、実装するより良い方法...

Docker ベースの Selenium 分散環境の構築

1.画像をダウンロードするdocker pull selenium/hub docker pull ...

Docker での Tomcat インストールの 404 問題の解決方法

tomcat の containerID を見つけて、tomacat ディレクトリに入ります。 [r...

Windows 7 で MySQL 8.0.16 をインストールして使用する場合、パスワードの変更と Navicat への接続に関する問題が発生する

MySQL のインストール時にいくつかの問題が発生しました。オンラインで見つけた回答は似たようなもの...

Linux での MySQL 5.7 の導入とリモート アクセス構成

前書き: 最近、私はパートナーとチームを組んで .NET Core プロジェクトに取り組む予定です。...

1 つの記事で React における Redux の初期の使用を理解する

Redux はデータ状態管理プラグインです。React や Vue を使用してコンポーネント化された...