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 公式サイトのビッグウェーブ特殊効果の例を模倣する

推薦する

Docker を使用して Jenkins をインストールするためのサンプル コード

Dockerコンテナのインストール時に遭遇しやすい2つの問題1.ポートはすでに割り当てられています(...

Vueはdivホイールのズームインとズームアウトを実装します

Vue プロジェクトで div ホイールのズームインとズームアウト、ドラッグ効果、キャンバス効果に似...

ブロックレベル要素、インライン要素、可変要素の概要

ブロック要素p - 段落テキストの事前フォーマットテーブルol - ソートフォームul - 順序なし...

初心者でもjsのtypeofとinstanceofの違いを理解できます

目次1. 型2. インスタンス3. 違い1. 型typeof 演算子は、評価されていないオペランドの...

MySQL でよく使用されるデータベースとテーブル シャーディング ソリューションの概要

目次1. データベースのボトルネック2. サブライブラリとサブテーブル2. 横長テーブル3. 垂直サ...

JavaScript排他的思考の具体的な実装

前回のブログで、Xiao Xiong は関連する要素の操作方法を更新しましたが、同じ要素のグループが...

HTML ウェブページでのアンカー(名前付きアンカー)の使用の概要

以下の情報はインターネットから収集したものです1. アンカーは、Web ページ作成におけるハイパーリ...

MySQL 接続数を設定する方法 (接続数が多すぎる)

mysql使用中に接続数が超過していることが判明しました~~~~ [root@linux-node...

Docker コンテナは実行後に終了します (実行を継続する方法)

現象Dockerコンテナを起動する docker run –name [コンテナ名] [コンテナID...

Webフロントエンドスキル概要(個人の実務経験)

1. 今日、ページを作っているときに、矢印を中央に配置する効果に遭遇しました。クリック領域を大きくし...

Docker を使用して静的 Web サイト アプリケーションを作成する (複数の方法)

静的ウェブサイトをホストできるサーバーは数多くあります。この記事では、nginx、apache、to...

Vueキャッシュ機能の使い方

目次vue2のキャッシュ機能Vue キャッシュ関数の変換最適化要約するvue2のキャッシュ機能vue...

写真とテキストによる MySQL 8.0.11 インストール チュートリアル

インターネット上には多くのチュートリアルがありますが、基本的には同じです。ただし、細かい原因でソフト...

CentOS7.4 起動時の緊急モードへようこそメッセージに対する解決策

今日は仮想マシンを使って実験をしました。システムをインストールし、いくつかのオプションを最適化した後...

Docker Composeを使用してDOCleverをインストールする詳細なプロセスを説明します

目次1. Docker Composeとは何か、インストールして使用する方法2. DOCleverと...