MySQL初心者はグループ化や集計クエリの煩わしさから解放されます

MySQL初心者はグループ化や集計クエリの煩わしさから解放されます

1. グループクエリの概略図

ここに画像の説明を挿入

上記の生データに対して、 DEPARTMENT_ID (従業員ID)でグループ化し、 SALARY (給与)の平均値を計算します。

ここに画像の説明を挿入

上記の原則はコードにどのように記述すればよいでしょうか?

選択 
	部門ID、平均(給与)
から 
	テスト
グループ化 
	部門ID;

department_idでグループ化した後、システムは同じdepartment_idを持つ行をデフォルトで一緒に割り当てることがはっきりとわかります。複数の異なるdepartment_idがある場合、それらは複数のグループに分割され、各グループのデータ行数は必ずしも同じではありません。

自動割り当てが完了すると、記述したグループ化関数に従ってグループ内操作が実行されます。

つまり、 sum()関数を使用するとグループ内で合計が計算され、 avg()関数を使用するとグループ内で平均が計算され、 count()関数を使用するとグループ内でカウントが実行され、 max()関数を使用するとグループ内で最大値が計算され、 min()関数を使用するとグループ内で最小値が計算されます。

2. group byキーワードの構文の詳細な説明

MySQL を学習するとき、多くの初心者はgroup byキーワードで行き詰まります。そこで、このキーワードの意味を本当に理解していただくために、現地の言葉で書かれた写真や文章を使用したいと思います。

ここに画像の説明を挿入

group byクエリをグループ化するために使用されるキーワードであり、通常はsum(),avg(),count(),max(),min()集計関数で使用されます。つまり、SQL ステートメントにgroup byがある限り、通常、選択後の表示フィールドに 1 つ以上の集計関数 (5 つの集計関数) が表示されます。上の図を見ると、覚えておくべきことが 1 つあります。テーブル内のフィールド A でグループ化した後は、通常、フィールド A で集計関数を使用するよりも、テーブル内の他のフィールドで集計関数を使用する方が理にかなっています。これはあまり意味がありません。

次の質問について考えてみましょう!

SQL ステートメントで group by を使用する場合、select の後に集計関数 (5 つの集計関数) を使用するフィールドが必要です。しかし、この集計関数以外に、選択後に他のフィールドを追加できますか?

答えは間違いなくイエスです!ただし、このフィールドには一定の制限があり、すべてのフィールドを使用できるわけではありません。つまり、SQL ステートメントでgroup byキーワードが使用されている場合、集計関数を除いて、選択できるのはgroup by後に表示されるフィールドのみになります。つまり、図のフィールド A では、 group byのフィールドのみが select 後に存在できます。

3. 簡単なグループクエリの例

例: 部門番号 deptno でグループ化し、各部門の平均給与を計算します。

選択 
    deptno、平均(sal) 平均
から 
    エンプ
グループ化 
    部門

結果は次のとおりです。

ここに画像の説明を挿入

4. グループ化前とグループ化後のスクリーニング

このナレッジポイントは、where フィルターを使用する必要がある理由をすべての人に理解してもらうためのものです。フィルターはいつ使用すればよいですか?この知識ポイントは、MySQL を学習する初心者にとっても難しいものです。心配しないでください。黄氏の指示に従って MySQL を学習すれば、学べないことは何もありません。

1) 元のテーブルと結果セットの概念

元テーブルとは、データベース内に実際に存在するテーブルを指します。元テーブル情報は、[select * from table name] を使用して照会されます。結果セットとは、SQL ステートメントに他の制限条件を追加した後に最終的に表示されるテーブルを指します。異なる制限を追加すると、クエリ結果セットも異なります。元のテーブルは 1 つだけですが、結果セットはさまざまです。

2) 黄氏の素晴らしいアドバイス

需要に集計関数が条件として含まれる場合は、グループ化後にフィルタリングする必要があります。事前グループ化スクリーニングが可能な場合は、事前グループ化スクリーニングを優先します。 (パフォーマンスの問題を考慮して)

ここに画像の説明を挿入

3) ケーススタディ

元のデータセットは次のとおりです。

ここに画像の説明を挿入

①グループ分け前のスクリーニング

練習 1: 名前に文字 S が含まれる各部門の給与の合計を求めます。

ここに画像の説明を挿入

演習 2: 給与が 2000 を超えるさまざまな部門の平均給与を照会します。

ここに画像の説明を挿入

②グループ分け後のスクリーニング

演習 1: 従業員数が 3 を超える部門の部門番号と従業員数を照会します。

ここに画像の説明を挿入

演習 2: 最高給与が 3000 を超える各部門の部門番号と最高給与を照会します。

ここに画像の説明を挿入

③ グループ化前スクリーニングとグループ化後スクリーニングの併用

演習: 1981 年に入社し、異なる部門間の平均給与が 2000 を超える従業員の部門番号と平均値を求めます。

ここに画像の説明を挿入

5. グループクエリ(関数によるグループ化)

演習: 従業員を名前の長さでグループ化し、各グループの従業員数を調べ、従業員数が 3 人を超えるグループを除外します。

長さ(ename) len,count(*) カウントを選択
empから
長さでグループ化
カウントが 3 を超える;

結果は次のとおりです。

ここに画像の説明を挿入

6. グループクエリ(複数のフィールドによるグループ化)

演習: 各部門および各職種の従業員の平均給与を照会します。

ここに画像の説明を挿入

7. グループ化と順序付けの古い組み合わせ

演習 1: 各部門の従業員の平均給与を照会し、平均給与の降順で並べ替えます。

ここに画像の説明を挿入

演習 2: 各部門の従業員の平均給与を照会し、平均給与の昇順で並べ替えます。

ここに画像の説明を挿入

8. グループクエリの概要

1) グループ化関数は条件として使用され、 having節に配置する必要があります。

2) 事前のグループ分けスクリーニングが可能な場合は、優先的に利用します。 (フィルターwhere )

3) group by句は、単一フィールドのグループ化、複数フィールドのグループ化 (複数のフィールドはカンマで区切られ、順序の要件はありません)、および関数のグループ化 (あまり一般的ではありません) をサポートします。

上記は、MySQL初心者がグループ化された集計クエリの悩みから解放される詳細な内容です。MySQLのグループ化された集計クエリの詳細については、123WORDPRESS.COMの他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • MySQL データベースの集計クエリと結合クエリ操作
  • MySQL ジョイントクエリ UNION と UNION ALL の使用法の紹介
  • Mysql の 2 つのテーブル間の結合クエリの 4 つの状況の概要
  • MySQL マルチテーブルジョイントクエリ効率の詳細な分析と最適化
  • いくつかのMySQLジョイントクエリの一般的な説明
  • MySQL マルチテーブル共同クエリ操作例の分析
  • MySQL 集計クエリと結合クエリ操作の例

<<:  HTML のインラインブロックの空白を素早く削除する 5 つの方法

>>:  vue3+threejs を使用して iView 公式サイトのビッグウェーブ特殊効果の例を模倣する

推薦する

LinuxとGNUシステムの関係の詳細な説明

目次私たちが毎日実行している Linux システムとは何でしょうか? LinuxカーネルとGNUシス...

MySQLは遅いSQLを開始し、原因を分析します

ステップ1. MySQLスロークエリを有効にする方法1: 設定ファイルを変更するWindows: W...

Dockerのセキュリティについて Docker-TLS暗号化通信の問題

目次1. Dockerのセキュリティ問題2. Dockerアーキテクチャの欠陥とセキュリティメカニズ...

データベース内のSQL整合性制約ステートメントの分析

整合性制約整合性制約はテーブル データの正確性を保つためのものです。データが正しくない場合は、そもそ...

MySql でメモリ使用量を削減する方法の詳細な説明

序文デフォルトでは、MySQL はデータベース クエリ データをキャッシュするために大きなメモリ ブ...

Vue プロジェクトで TS (TypeScript) を使用するための入門チュートリアル

目次1. Typescriptの紹介2. 設定ファイル webpack 設定3. プロジェクトに.t...

Dockerはコンテナを通じてイメージを生成し、詳細にDockerCommitを送信します

目次ローカルでコンテナを作成した後、このコンテナに基づいてローカル イメージを作成し、このイメージを...

CocosCreator最適化DrawCallの詳細な説明

目次序文ドローコールとはDrawCall はパフォーマンスにどのような影響を与えますか?ドローコール...

MySQLは既存のコンテンツを保持し、後でコンテンツを追加します

このコマンドは、データ テーブル ff_vod を変更し、vod_url フィールドの内容の後に 9...

Dockerとイメージの操作方法

ミラーを探すDocker Hubのウェブサイトからイメージを検索できます。Docker Hubのウェ...

更新SQL文に基づくMySQLロックの理解

序文MySQL データベース ロックは、データの一貫性を実現し、同時実行性の問題を解決するための重要...

Win10 VM 仮想マシンに Mac OS10.14 を完璧にインストールする (グラフィック チュートリアル)

最近、Apple の記者会見を見てとても興奮したので、Mac システムを体験して Apple の素晴...

CSSを使用して中央に固定された2つの列と適応型列を実現する方法

1. 絶対位置とマージンを使用するこの方法の原則は、左側と右側をドキュメントの流れから外れるように配...

CSSで制御可能な点線を実装する方法

序文CSS を使用して点線を生成するのは、フロントエンド開発者にとっては簡単です。一般的に、これを実...

onfocus="this.blur()" は視覚障害のあるウェブマスターに嫌われている

スクリーン リーダー ソフトウェアの操作ページについて話しているとき、彼はフロントエンドの学生たちに...