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コンテナの紹介

1. 概要1.1 基本概念: Docker は、Go 言語をベースにしたオープンソースのアプリケーシ...

HTML 形式の JSON 出力の例 (テスト インターフェース)

JSON データを美しいインデント形式で表示するには、最も単純な JSON.stringify 関...

【Webデザイン】E-WebTemplates の美しい海外の Web ページ テンプレート (FLASH+PSD ソース ファイル+HTML) を共有します

これらはすべて海外のE-WebTemplates WebサイトからのWebページテンプレートであり、...

NFS サーバーの原理と、その構築、構成、展開の手順を簡単に分析します。

目次NFS サービスの概要NFS とは何ですか? NFS マウントの原則NFS サーバーはデータ転送...

2級コンピュータ試験のMySQL知識ポイント mysql alterコマンド

テーブル構造を編集するための MySQL の alter コマンドの使用。具体的な内容は以下のとおり...

背景画像の配置におけるbackground-position属性の自己理解

最近、プロジェクトではラベルやボタンなどの断片的な画像をたくさん使用する必要があります。また、CSS...

DockerHubを自分で構築する方法

先ほど使用したDocker HubはDockerによって提供されています。独自のDockerを構築す...

Debian 9 システムに MySQL データベースをインストールする方法

序文タイトルを見ると、誰もが「Debian 9 に MySQL をインストールするにはどうすればいい...

Linuxは、単一のIPをバインドするためにデュアルネットワークカードを実装するためにボンドを使用します。サンプルコード

ネットワークの高可用性を実現するには、複数のネットワーク カードを仮想ネットワーク カードにバインド...

SQL 実践演習: オンライン モール データベース ユーザー情報データ操作

オンラインショッピングモールデータベース - ユーザー情報データ運用プロジェクトの説明電子商取引の台...

CSS3 背景コントロールプロパティと色遷移を使用してグラデーション効果を実現します。

CSS3 背景画像関連互換性: IE9+背景クリップ 背景画像描画領域background-cli...

Windows に MySQL 8.0.16 をインストールする手順とエラーの解決方法

1. はじめに: mysql8以降は、これまでよく使われていたバージョンと比べてかなり変更点が大きい...

インスピレーションを得るための7つのクールなダイナミックウェブサイトデザイン

デザインの分野では、毎年さまざまなデザインのトレンドや流行があります。たとえば、近年のレスポンシブデ...

Nginxはhttpとhttpsの両方のアクセスをサポートするために同じドメイン名を設定します

Nginx は同じドメイン名で構成されており、http と https の両方でアクセスできます。証...

MySql 8.0 と対応するドライバー パッケージの一致に関する注意事項

MySql 8.0 対応ドライバパッケージのマッチングMySql データベースをバージョン 8.0 ...