MySQL の group by に関する簡単な説明

MySQL の group by に関する簡単な説明

1. はじめに

MySQLgroup by 、クエリされたデータをグループ化するために使用されます。さらに、 MySQL 、グループ内のデータをフィルター処理するためのhaving句も提供されています。

MySQL多くのselect句キーワードを提供します。

声明文中の順序は次のとおりです。

条項効果必要か/いつ使うべきか
選択返されるデータまたは式を照会するはい
からクエリするテーブルを指定しますいいえ
どこ行レベルのフィルタリングを指定するいいえ
グループ化グループ化いいえ/データをグループ化するときに使用
持つパケットフィルタリングいいえ/グループ化されたデータをフィルタリングするために使用
並び替えデータを返すときに並べ替えルールを指定するいいえ
制限返される行数を指定しますいいえ

2. ユーザーテーブルを準備する

DDLとテーブルデータは次の通りであるユーザーテーブルを準備します。

名前を設定します utf8mb4;
FOREIGN_KEY_CHECKS = 0 を設定します。

-- ----------------------------
-- ユーザー用テーブル構造
-- ----------------------------
`user` が存在する場合はテーブルを削除します。
テーブル `user` を作成します (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主キー',
  `name` varchar(255) 文字セット utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'ユーザー名',
  `nation` varchar(255) 文字セット utf8 照合 utf8_general_ci NULL デフォルト NULL コメント 'Ethnicity',
  `age` int(11) NULL デフォルト NULL コメント '年齢',
  `height` double NULL デフォルト NULL コメント '高さ',
  `sex` smallint(6) NULL デフォルト NULL コメント '性別',
  BTREE を使用した主キー (`id`)
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- ユーザーの記録
-- ----------------------------
INSERT INTO `user` VALUES (1, '李子八', '汉族', 18, 180, 1);
INSERT INTO `user` VALUES (2, '张三', '慧族', 20, 175, 1);
`user` に VALUES (3, '李四', 'Uyghur', 45, 168, 0) を挿入します。
`user` に VALUES (4, '王五', '蒙古族', 18, 177, 1) を挿入します。
INSERT INTO `user` VALUES (5, '赵六', '汉族', 16, 184, 0);
INSERT INTO `user` VALUES (6, '田七', 'Uygur', 27, 192, 1);

ユーザー テーブルのデータは次のとおりです。

mysql> ユーザーから * を選択します。
+----+---------+---------+-------+-------+------+
| ID | 名前 | 国籍 | 年齢 | 身長 | 性別 |
+----+---------+---------+-------+-------+------+
| 1 | 李子巴 | 漢民族 | 18 | 180 | 1 |
| 2 | 張三 | 回族 | 20 | 175 | 1 |
| 3 | 李斯 | ウイグル人 | 45 | 168 | 0 |
| 4 | 王武 | モンゴル語 | 18 | 177 | 1 |
| 5 | 趙柳 | 漢民族 | 16 | 184 | 0 |
| 6 | 天啓 | ウイグル語 | 27 | 192 | 1 |
+----+---------+---------+-------+-------+------+
セット内の 6 行 (0.00 秒)

2.1 グループ化ルール

group by group by

  • group by句はwhereの後、 order by句の前に配置されます。
  • having句は、group by 句の後、order by 句の前に配置されます。
  • group by句内の各列は、選択列または有効な式である必要があります。集計関数は使用できません。
  • selectで使用される式は、group by句に出現する必要があり、別名は使用できません。
  • グループgroup byデータには null 値が含まれており、null 値は 1 つのグループにまとめられます。
  • group by句はネストすることができ、ネストされたグループは最後のグループで要約されます。

2.2 グループの使用

必要:

さまざまな国籍のユーザーの数を数える

声明:

mysql> ユーザーグループから nation を選択し、count(*) を nation で選択します。
+----------+-----------+
| 国 | カウント(*) |
+----------+-----------+
| 漢民族| 2 |
| 回族| 1 |
| ウイグル語 | 2 |
| モンゴル語| 1 |
+----------+-----------+
セット内の 4 行 (0.00 秒)

GROUP BY はwhereと組み合わせて使用​​できますが、 group byの後のフィルタリングにwhereを使用することはできません。 where句を使用した後、グループ化されたデータは WHERE 句によってフィルタリングされたデータセットになります。

mysql> ユーザーから nation_num として count(*) を選択し、 sex = 0 で nation をグループ化します。
+----------+-------------+
| 国 | 国番号 |
+----------+-------------+
| ウイグル語 | 1 |
| 漢民族| 1 |
+----------+-------------+
セット内の 2 行 (0.00 秒)

2.3 havingの使用

group group byグループ化した後のデータを再度フィルタリングする必要がある場合は、 having句を使用する必要があります。 MySQL サーバーはgroup by句の後に where 句を使用すると例外をスローします。

mysql> ユーザーグループから nation, count(*) as nation_num を選択し、nation = '汉族' を選択します。
エラー 1064 (42000): SQL 構文にエラーがあります。1 行目の 'where nation = '汉族'' 付近で使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。


この時点では、上記の where 句を having 句に置き換えるだけで済みます。having havingはすべてのwhere演算子をサポートします。簡単に言うと、where 句は、group by 句を having に置き換えた場合にのみ、 group by句の後に使用できますhaving

vmysql> ユーザーグループから nation を選択し、count(*) を nation_num として取得します。nation は '汉族' です。
+--------+-------------+
| 国 | 国番号 |
+--------+-------------+
| 漢民族| 2 |
+--------+-------------+
セット内の 1 行 (0.00 秒)

2.4 order by と limit

グループ化されたデータを並べ替える必要がある場合は、 order by使用できます。 order by句は、 having句の後に置く必要があります。

mysql> ユーザーグループから nation を選択し、 count(*) を nation_num として取得します。 nation != '汉族' を order by nation_num desc;
+----------+-------------+
| 国 | 国番号 |
+----------+-------------+
| ウイグル語 | 2 |
| 回族| 1 |
| モンゴル語| 1 |
+----------+-------------+
セット内の 3 行 (0.00 秒)

出力結果に返される行数を指定する必要がある場合は、 limitを使用できます。 limit 句は、ステートメント全体の最後にあります。

mysql> select nation, count(*) as nation_num from user group by nation having nation != '汉族' order by nation_num desc limit 2;
+----------+-------------+
| 国 | 国番号 |
+----------+-------------+
| ウイグル語 | 2 |
| 回族| 1 |
+----------+-------------+
セット内の 2 行 (0.00 秒)

2.5 ロールアップ付き

group by 句では、 WITH ROLLUPグループ化された統計データに基づいて同じ統計 (SUM、AVG、COUNT など) を実行できます。

たとえば、max():

mysql> ユーザーグループから nation, max(height) を nation_num として選択し、rollup で nation をロールアップします。
+----------+-------------+
| 国 | 国番号 |
+----------+-------------+
| 回族| 175 |
| 漢民族| 184 |
| ウイグル語 | 192 |
| モンゴル語| 177 |
| NULL | 192 |
+----------+-------------+
セット内の行数は 5 です (0.00 秒)

たとえば、avg():

mysql> ユーザーグループから、nation、avg(height) を nation_num として選択し、rollup で国を選択します。
+----------+--------------------+
| 国 | 国番号 |
+----------+--------------------+
| 回族| 175 |
| 漢民族| 182 |
| ウイグル語 | 180 |
| モンゴル語 | 177 |
| NULL | 179.33333333333334 |
+----------+--------------------+
セット内の行数は 5 です (0.00 秒)

たとえば、count():

mysql> ユーザーグループから nation, count(*) as nation_num を選択し、rollup で nation を指定します。
+----------+-------------+
| 国 | 国番号 |
+----------+-------------+
| 回族| 1 |
| 漢民族| 2 |
| ウイグル語 | 2 |
| モンゴル語| 1 |
| NULL | 6 |
+----------+-------------+
セット内の行数は 5 です (0.00 秒)

これで、MySQL の group by に関するこの記事は終了です。MySQL の group by の詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • C# でクエリ式 GroupBy を使用する方法
  • MySQL データベース グループ クエリの group by ステートメントの詳細な説明
  • Oracle グループクエリにおける group by の使用ルールの詳細な説明
  • グループ統計のためにデータテーブルで groupby を使用する方法
  • グループ化の使用法の詳細な説明

<<:  HTTP ヘッダー情報の解釈と分析 (詳細概要)

>>:  Linux のソフトリンクとハードリンクの詳細な説明

推薦する

HTML メタの使用例

使用例コードをコピーコードは次のとおりです。 <!DOCTYPE html> <!...

React.cloneElement の使い方の詳しい説明

目次cloneElementの役割使用シナリオ新しい小道具を追加するプロップを変更するイベントカスタ...

Vue3.0はドロップダウンメニューのカプセル化を実装します

Vue3.0 がリリースされてからしばらく経ちましたが、勉強を始める必要があります。まず、達成したい...

スクロール時に選択領域のフォント色を暗くするために CSS を使用するサンプルコード

日付ピッカーをカプセル化する場合、選択時にフォントの色を暗くする必要があります。実装後の効果を見てみ...

MySQL サービスを完全に削除する方法 (レジストリをクリーンアップする)

序文あるプロジェクトの実行可能ファイルをインストールすると、MySQL 自体をインストールできるよう...

Linux システムでの CPU 使用率が高い場合のトラブルシューティングのアイデアと解決策

序文Linux 運用保守エンジニアとして、日々の業務の中で Linux サーバーの CPU 負荷が ...

vue で h5 側のアプリを開きます (Android か Apple かを判断します)

1. 開発環境 vue+vant 2. コンピュータシステム Windows 10 Profess...

WeChatアプレットwebViewにH5を埋め込む方法の例

序文WeChat ミニプログラムは新しいオープン機能を提供します!ついにミニプログラムにHTMLペー...

Linux gccコマンドの具体的な使い方

01. コマンドの概要gcc コマンドは、GNU がリリースした C/C++ ベースのコンパイラを使...

divの背景を透明に設定する方法の例

div の背景を透明にする一般的な方法は 2 つあります。 1. 不透明度属性を 0 ~ 1 の値に...

CMD で MySQL データベースを操作するときに中国語の文字化けが発生する問題の解決方法

Baiduで検索しました。 。 chcp コマンドを使用して、cmd の文字エンコーディングを 65...

Mac に Windows サービスを備えた仮想マシンをインストールする方法

1. 仮想マシンをダウンロードする公式ダウンロードウェブサイト: https://www.vmwar...

表示しているページのスナップショットを Baidu が保存できないように設定する方法

今日、Baidu でページを検索したところ、ページが削除されていたため、当然 Baidu スナップシ...

MySQL 8.0.17 のインストールと使用方法のチュートリアル図

前面に書かれた過去および現在のプロジェクトで最も一般的に使用されているリレーショナル データベースは...