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 テキスト強調を使用してテキストを強調するための実装コード

推薦する

JavaScriptでフロアナビゲーションエフェクトを作成するプロセスの詳細な説明

目次この期間の目標1. 関数の実装1.1 構造層1.2 スタイルレイヤー1.3 行動層1.3.1 フ...

HTML テーブルタグチュートリアル (11): 水平方向の配置属性 ALIGN

水平方向では、テーブルの配置を左、中央、右に設定できます。基本的な構文<テーブル配置=&quo...

MySQL のロードバランサーとして nginx を使用する方法

注意: nginxのバージョンは1.9以上である必要があります。nginxをコンパイルするときに、-...

nginx 設定ファイルパスとリソースファイルパスを表示する方法

nginx 設定ファイルのパスを表示する nginx -t 経由nginx -t コマンドの本来の機...

JavaScript デザインパターンの学習 アダプタパターン

目次概要コードの実装要約する概要アダプタ パターンは、デザイン パターンの動作パターンのパターンです...

CSS3 を使用して円形スクロール プログレス バー アニメーションを作成する例

テーマ今日は、CSS3 を使用して円形スクロール プログレス バー アニメーションを作成する方法を説...

WeChatアプレットが弾丸画面を送信するビデオプレーヤーを実装

この記事では、WeChatアプレットでビデオプレーヤーの集中砲火を実装するための具体的なコードを参考...

MySQL 8.0.16 winx64 のインストールと設定方法のグラフィックチュートリアル (win10 の場合)

この記事では、MySQL 8.0.16 winx64のインストールと設定の具体的な方法を記載します。...

mysql IS NULL インデックスケースの説明を使用する

導入MySQL の SQL クエリ ステートメントで is null、is not null、!= ...

Mysql でサーバーの UUID を変更する方法

問題の原因:スレーブサーバーがクローンマスターサーバーである場合、server-uuidの値は同じで...

MySQL 子テーブルで外部キー制約チェックを無効にする方法

準備する:教師テーブルと生徒テーブルを定義し、生徒テーブルで教師テーブルIDを参照します。テーブルt...

HTMLバージョン宣言DOCTYPEタグ

通常のウェブサイトのソースコードを開くと、ソースコードは<!DOCTYPE htmlで始まる必...

MySQL でのフィルター条件なしのカウントの詳細な説明

カウント(*)成し遂げる1. MyISAM: テーブル内の行の総数をディスク上に保存し、フィルタリン...

Linux で PHP を 5.6 にアップグレードする実用的な方法

1: ターミナルに入ったらPHPのバージョンを確認する php -v出力は次のようになります。 PH...