MySQL の group by と having の詳細な説明

MySQL の group by と having の詳細な説明

GROUP BY 構文を使用すると、指定されたデータ列の各メンバーに従ってクエリ結果をグループ化してカウントし、最終的にグループ サマリー テーブルを取得できます。

SELECT 句の列名は、グループ化列、または group by 句で定義された各グループの結果を返す列関数である必要があります。

従業員情報テーブルの構造とデータは次のとおりです。

  ID 名前 部門 給与 教育レベル 雇用日 
  1 張三開発部 2000 3 2009-10-11
  2 李思開発部 2500 3 2009-10-01
  3 王武設計部 2600 5 2010-10-02
  4 王 劉 設計部 2300 4 2010-10-03
  5 マキデザイン部 2100 4 2010-10-06
  6 趙巴 営業部 3000 5 2010-10-05
  7 千九営業部 3100 7 2010-10-07
  8 サンテン営業部 3500 7 2010-10-06

各部門の最高給与をリストしたいです。SQL ステートメントは次のようになります。

部門、最大(給与)を最大として選択します
スタッフより
部門別グループ

クエリ結果は次のとおりです。

部門最大
開発部 4500
デザイン部 2600
営業部 3500

この結果を説明してください:

1. SELECT には group by に含まれる列 dept があるため、「SELECT 句の列名はグループ化列または列関数である必要があります」という条件は満たされます。

2. 「列関数は、group by 句で定義された各グループの結果を返します」。部門のグループ化に従って、各部門の最高給与である結果が部門ごとに返されます。

where句とgroup by句の使用

グループ化されたクエリには、グループと計算列関数を形成する前に、不適格な行を削除する標準の where 句を含めることができます。 where句はgroup by句の前に指定する必要があります

たとえば、2010年に入社した社員の、各部門と各レベルの最高給与を照会する

部門、教育レベル、MAX(給与) を MAXIMUM として選択します
スタッフより
ここで、 hiredate > '2010-01-01'
部門、教育レベル別にグループ化

クエリ結果は次のとおりです。

学部教育レベル最大
デザイン部4 2300
デザイン部5 2600
営業部5 3000
営業部 7 3500

SELECT ステートメントで指定されたすべての列名は、GROUP BY 句でも指定されます。両方の場所で列名が指定されていない場合は、エラーが発生します。 GROUP BY 句は、dept と edlevel の一意の組み合わせごとに 1 行を返します。

GROUP BY 句の後に Having 句を使用する

条件を満たすグループの結果のみが返されるように、グループ化に条件を適用できます。したがって、GROUP BY 句の後に HAVING 句が含まれます。 HAVING は WHERE に似ています (唯一の違いは、WHERE は行をフィルターし、HAVING はグループをフィルターすることです)。HAVING はすべての WHERE 演算子をサポートします。

たとえば、従業員が 2 人以上いる部門の最高給与と最低給与を検索するには、次のようにします。

部門、MAX(給与) を MAXIMUM、MIN(給与) を MINIMUM として選択します。
スタッフより
部門別にグループ化
カウント(*) > 2
部門別に注文

クエリ結果は次のとおりです。

部門 最大 最小
デザイン部 2600 2100
営業部 3500 3000

たとえば、従業員の平均給与が 3000 を超える部門で最高給与と最低給与を検索するには、次のようにします。

部門、MAX(給与) を MAXIMUM、MIN(給与) を MINIMUM として選択します。
スタッフより
部門別にグループ化
平均給与が3000以上
部門別に注文

クエリ結果は次のとおりです。

部門 最大 最小
営業部 3500 3000

MySQL の group by と having の詳しい使い方については、これで終わりです。MySQL の group by と having に関するより詳しい内容については、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続きご覧ください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQL データベース グループ クエリの group by ステートメントの詳細な説明
  • MySQL の効率的なクエリの左結合とグループ化 (プラス インデックス)
  • MySQL Group by最適化の詳細な説明
  • MySQLのGROUP BYステートメントを最適化する方法
  • MySQL の group by と order by を一緒に使用する方法
  • 複数のフィールドをグループ化するMySQLグループ
  • 各グループの最新データを取得するためにMySQLベースのグループを実装する
  • MySQL の group by に関する簡単な説明

<<:  Linux の操作とメンテナンスの基本システムディスク管理チュートリアル

>>:  CSS テキスト強調を使用してテキストを強調するための実装コード

推薦する

Linux環境でユーザーにsudo権限を追加する方法

sudo 設定ファイルsudo のデフォルトの設定ファイルは /etc/sudoers です。一般的...

スキニングを実現するネイティブJavaScript

ネイティブJavaScriptでスキニングを実装するための具体的なコードは参考までに。具体的な内容は...

テーブルレイアウトの長所と短所、そして推奨されない理由

テーブルの欠点1. テーブルは他の HTML タグよりも多くのバイトを占有します。 (ダウンロード時...

曇り空のアイコン効果を実現する純粋な CSS

効果効果は以下のとおりです​実装のアイデアbox-shadow プロパティを使用して、複数の灰色の円...

MYSQLでプロシージャの名前を変更する方法の詳細な説明

最近、ストアド プロシージャの名前を変更する機能を使用しました。インターネットで情報を検索しましたが...

コード例を通してページ置換アルゴリズムの原理を理解する

ページ置換アルゴリズム: 本質は、限られたメモリをワイヤレス プロセスに対応できるようにすることです...

Vueは携帯電話のカメラとアルバムを呼び出す機能を実装します

この記事では、携帯電話のカメラとアルバムにアクセスするためのVueの具体的なコードを参考までに共有し...

CSS3 メディアクエリにおけるデバイス幅と幅の違いの詳細な説明

1.デバイス幅定義: 出力デバイスの画面表示幅を定義します。 Web ページが Safari で開か...

js は複数の画像を zip にパッケージ化します

目次1. ファイルをインポートする2. HTMLページ3. メインコード4. 画像をbase64に変...

Nest.js 認証検証方法の例

目次0x0 はじめに0x1 RBAC 実装0x2 クレームベースの承認0x3 統合 CASL 0x4...

Vueの使用に関する深い理解

目次Vueのコアコンセプトを理解するVueの双方向バインディングの原理と実装を探るVue 双方向バイ...

Linux の chown コマンドと chmod コマンドの違いの詳細な説明

Linux システムでは、chmod コマンドと chown コマンドの両方を使用して権限を設定でき...

Vue Element-ui はツリーコントロールノードを実装し、アイコンを追加します。詳細な説明

目次1. レンダリング2. データをバインドし、ツリーテーブルにラベルを追加する3. すべてのコード...

jQuery ツリービュー ツリー構造アプリケーション

この記事では、jQueryツリービューツリー構造のアプリケーションコードを例として紹介します。具体的...

Linux でリモート MySQL データベースを手動で展開する方法の詳細な説明

1. mysql をインストールします。次のコマンドを実行して、YUM ソースを更新します。 rpm...