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 のソフトリンクとハードリンクの詳細な説明

推薦する

Docker ファイルの保存パス、ポート マッピング操作モードの変更

コンテナの起動コマンドを取得する方法コンテナはすでに作成されていますが、その起動パラメータ(データが...

CSSを使用してファイルアップロードパターンを描画する

以下に示すように、あなたならどのようにそれを達成しますか: 通常、フォントアイコンを使用して中央にプ...

JavaScript関数導入の詳しい説明

目次機能紹介関数関数の作成コンストラクタは関数を作成する関数宣言は関数を作成する関数式関数を作成する...

Vue2.x と Vue3.x のルーティングフックの違いの詳細な説明

目次vue2.xプレコンセプト:ルーティングフックのカテゴリルーティングとコンポーネントの概念(フッ...

Linux での MySQL 5.6.33 のインストールと設定のチュートリアル

このチュートリアルでは、LinuxでのMySQL 5.6.33のインストールと設定方法を参考までに紹...

MySQL 5.7.25 圧縮版のインストールと設定方法のグラフィックチュートリアル

この記事では、MySQL 5.7.25圧縮版のインストールと設定方法を参考までに紹介します。具体的な...

MySQL 作成ルーチン権限に関する注意事項

1. ユーザーにルーチン作成権限がある場合は、プロシージャ | 関数を作成できます。 2. ユーザー...

MySQLのスロークエリの詳細な説明

MySQL操作情報のクエリ show status -- すべての MySQL 操作情報を表示します...

Vueはアンカー配置機能を実装します

この記事では、アンカー配置を実装するためのVueの具体的なコードを例として紹介します。具体的な内容は...

Zabbix パスワードをリセットする方法 (ワンステップ)

問題の説明長い間アカウントパスワードを入力して Zabbix にログインしていないため、管理者パスワ...

HTML テーブルタグと関連する改行の問題の詳細な分析

テーブルとは何ですか?テーブルは、データのキャリアである HTML テーブルです。以下は比較的標準的...

MySQL Community Server 5.7.19 インストール ガイド (詳細)

MySQL公式サイトのzipファイルのダウンロードリンク https://dev.mysql.co...

JavaScript で配列の変更を監視する方法

序文以前、defineProperty を紹介したとき、オブジェクトの変更のみを監視でき、配列の変更...

MySQL でコミットされていないトランザクションを見つけるための SQL の例の簡単な分析

以前、「MySQL でコミットされていないトランザクション情報を検索する方法」というタイトルのブログ...