グループ化されたクエリでの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 の遅延読み込み属性パターンに関する簡単な説明

推薦する

MySQL 構成 SSL マスタースレーブ レプリケーション

MySQL5.6 SSLファイルの作成方法公式ドキュメント: https://dev.mysql.c...

最新の高品質な英語無料フォント36個を公開

01. 無限フォントのダウンロード02. バンダフォントのダウンロード03. ロールアップフォントの...

CSS 配送先住所平行四辺形線スタイルの例コード

コードは次のようになります。 // 配送先住所の平行四辺形の線のスタイル <view clas...

Vueルーティングルーターの詳細な説明

目次ルーティングプラグインをモジュール方式で使用するルートの使用宣言型ナビゲーションプログラムによる...

MySQLカスタム関数とストアドプロシージャの詳細な説明

序文この記事では主にMySQLのカスタム関数とストアドプロシージャに関する関連コンテンツを紹介し、皆...

CentOS7.8 に mysql 8.0.20 をインストールするための詳細なチュートリアル

1. MySQLソフトウェアをインストールするMySQL 公式 Yum リポジトリ、MySQL バー...

Web面接でよくある質問:リフローとリペイントの原理と違い

目次ブラウザのレンダリングメカニズムリフローと再塗装リフロー逆流を引き起こす行為:再描画再描画を引き...

ウェブサイトのハイパーリンクを開く方法に関する議論

新しいウィンドウが開きます。 利点: ユーザーがリンクをクリックしても、現在閲覧しているコンテンツは...

Zabbix で複数の JVM プロセスを監視する方法

1. シナリオの説明:私たちの環境ではマイクロサービスを使用しています。各プログラムには個別のプロセ...

MySQL データベースの詳細な説明 (Ubuntu 14.0.4 LTS 64 ビットベース)

1. MySQLデータベースの構成と関連概念まず、MySQL はリレーショナル データベースである...

Docker での Jenkins と Docker を使用した継続的デリバリー

1. 継続的デリバリーとは何かソフトウェア製品の出力プロセスは、ソフトウェアがいつでもリリースできる...

Windows で複数の MySQL インスタンスを実行する方法

序文Windows では、各インスタンスに適切なパラメータを使用してコマンド ラインから複数の My...

Mailtoを使えばHTMLでメールを送るのは簡単

最近、顧客のフッターメールボックスにクリックして送信するメール機能を追加しました。Baidu で検索...

MySQL 5.7 スレーブノードからマルチスレッド マスター スレーブ レプリケーションを構成する方法の詳細な説明

序文MySQL は MySQL 5.6 からマルチスレッド レプリケーションをサポートしていますが、...