グループ化されたクエリでの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 5.6 での table_open_cache パラメータの最適化と適切な構成の詳細な説明

1. はじめにtable_cache は非常に重要な MySQL パフォーマンス パラメータであり、...

DockerでRedisを使用するための詳細な手順

1. はじめにこの記事では、Docker を使用して Redis を探索する方法を説明します。 Do...

フォームから Vue ElementUI を使用してログイン効果を実装する例

目次1. ElementUIで基本的なスタイルを構築する2. [送信]ボタンをクリックして、アカウン...

jQueryで大画面スクロール再生効果を実現

この記事では、大画面スクロール効果を実現するためのjQueryの具体的なコードを参考までに紹介します...

HTTPS の有効化に関する経験の共有

国内のネットワーク環境が悪化し続ける中、さまざまな改ざんや乗っ取りが後を絶たず、サイト全体をHTTP...

WeChatアプレットで数字当てゲームを実装する実際のプロセス

目次機能紹介レンダリング1. ホームページレンダリング用のコード(index03) 2. ゲーム開始...

IDEA を使用して Web プロジェクトを作成し、Tomcat に公開する方法

目次ウェブ開発1. Web開発の概要Tomcatのインストールと設定Tomcatをインストールする2...

Linux サービス管理の 2 つの方法、service と systemctl の詳細な説明

1.サービスコマンドサービスコマンドは実際には/etc/init.dディレクトリに移動し、関連プログ...

Dockerを使用してGitlabを素早くデプロイする方法

1. GitLabイメージをダウンロードする docker pull gitlab/gitlab-c...

ドロップダウンメニューを実装するためのネイティブ js

ドロップダウン メニューも実生活では非常に一般的です。実装に使用される js コードは、タブ選択やア...

Ubuntu 20.04 デスクトップのインストールとルート権限の有効化および SSH インストールの詳細

記事は主にUbuntu 20.04の簡単なインストールプロセスを記録し、インストール後に国内ソースを...

Docker ベースの nginx ファイル サーバーを構築する方法と手順

1. このマシンに新しい設定ファイルdocker_nginx.confを作成します。 サーバー{ 7...

Linux での umask の使用に関する詳細な説明

私は最近 Linux を学び始めました。Ma Ge の umask に関する Linux コースを読...

MySQL はどのようにしてマスターとスレーブの一貫性を確保するのでしょうか?

目次MySQLマスタースレーブの基本原理3つのbinlog形式の比較混合形式のバイナリログが存在する...

Mysql5.7 で中国語の文字化けの問題を解決する

MySQL 5.7 を使用すると、Web ターミナル経由でデータベースに中国語の文字を書き込むと文字...