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

推薦する

CentOS 7.4 に MySQL 5.7 を手動でインストールする方法

MySQL データベースは、特に JAVA プログラマーの間で広く使用されています。クラウド データ...

thead、tfoot、tbodyを使用して表を作成します

これらの 3 つのタグを間違った方法で使用して、タイトルを表に沿わせたり、tbody の高さを固定し...

nginx でのリクエストのカウント追跡の簡単な分析

まずは適用方法を説明します。nginxモジュールにはjtxyとjtcmdの2つがあります。 http...

MySQLはOracleシーケンスに似たソリューションを実装しています

MySQLはOracleのようなシーケンスを実装しているOracle は通常、主キー フィールドを処...

Ubuntu 20.04 に MySql5.7 をインストールして構成するための詳細なチュートリアル

目次1. Ubuntuソースの変更2. MySQLをインストールする3. 新しいユーザーを作成し、権...

docker runとstartの違い

docker における実行と開始の違いDocker run はミラーイメージを指定します。そしてdo...

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

この記事ではMySQL 8.0.22のインストールと設定について記録します。具体的な内容は以下のとお...

Mysqlアカウント管理の原理と実装方法の詳細な説明

この記事では、例を使用して、MySQL アカウント管理の原則と実装方法を説明します。ご参考までに、詳...

CSS で background-color を使用して背景画像にマスク効果を追加する 2 つの方法

div で background-color と background-image を同時に設定する...

Linux での MySQL 5.1 および 5.7 のインストール チュートリアル

以下のコンテンツのオペレーティング システムは次のとおりです: Centos 6.7 yum で M...

CentOS8 システムをベースにした Gitlab を構築するために Docker を使用する詳細なチュートリアル

目次1. Dockerをインストールする2. GitLabをインストールする3. GitLabを初期...

Mysql 文字列の傍受と指定された文字列内のデータの取得

序文: 正規表現のインターセプションに似た、MySql フィールドの文字列から特定の文字を抽出すると...

スパンの最小高さを定義するソリューションは効果がありません

span タグは HTML ウェブページを作成するときによく使用されますが、このタグの使い方がよくわ...

MySQL SELECT実行順序の簡単な理解

SELECT ステートメントの完全な構文は次のとおりです。 (7)選択 (8) DISTINCT ...

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

MySQL は最も人気のあるリレーショナル データベース管理システムです。WEB アプリケーションに...