MySQL の GROUP_CONCAT() 関数は、複数の行のデータを 1 つのフィールドに連結するために使用されます。これは、を返す集計 (GROUP BY) 関数です。 弦 グループに少なくとも 1 つの非 ヌル 価値。それ以外の場合は返されます ヌル 。
構文:
SELECT col1, col2, ..., colN GROUP_CONCAT ( [DISTINCT] col_name1 [ORDER BY clause] [SEPARATOR str_val] ) FROM table_name GROUP BY col_name2;>
パラメーター:
- 列1、列2、...列N: これらはテーブルの列名です。
- 列名1: 値がグループごとに 1 つのフィールドに連結されるテーブルの列。
- テーブル名: テーブルの名前。
- 列名2: グループ化の対象となるテーブルの列。
内部でのさまざまな条項の使用 GROUP_CONCAT() 関数
- 明確な: これにより、結果から値の繰り返しが排除されます。
- 注文方法: グループの値を特定の順序で並べ替えて、それらを連結します。
- 区切り文字: デフォルトでは、グループの値は () で区切られます。 、 ) 演算子。この区切り文字の値を変更するには、Separator 句の後に文字列リテラルを使用します。それは次のように与えられます 区切り文字「str_value」 。
例:
Employee テーブルについて考えてみましょう。
| emp_id | fname | 名前 | 部門ID | 強さ |
|---|---|---|---|---|
| 1 | ムケシュ | グプタ | 2 | リーダーシップ |
| 3 | ニーラム | シャルマ | 3 | 勤勉な |
| 1 | ムケシュ | グプタ | 2 | 責任者 |
| 2 | デベシュ | チャギ | 2 | 時間厳守 |
| 3 | ニーラム | シャルマ | 3 | 自発的 |
| 1 | ムケシュ | グプタ | 2 | すぐに学べる |
| 4 | ケシャブ | シンハル | 3 | 聞いている |
| 2 | デベシュ | チャギ | 2 | すぐに学べる |
| 5 | 聞く | ジャイナ教 | 1 | 勤勉な |
| 4 | ケシャブ | シンハル | 3 | クリティカルシンキング |
| 5 | 聞く | ジャイナ教 | 1 | ゴール指向 |
クエリ
1. 単純な GROUP_CONCAT() 関数の使用 –
SELECT emp_id, fname, lname, dept_id, GROUP_CONCAT ( strength ) as 'strengths' FROM employee GROUP BY fname;>
出力
| emp_id | fname | 名前 | 部門ID | 強み |
|---|---|---|---|---|
| 1 | ムケシュ | グプタ | 2 | リーダーシップ、責任感、学習の早い人 |
| 2 | デベシュ | チャギ | 2 | 時間厳守、学習の早い人 |
| 3 | ニーラム | シャルマ | 3 | 勤勉で自発的 |
| 4 | ケシャブ | シンハル | 3 | 傾聴、批判的思考 |
| 5 | 聞く | ジャイナ教 | 1 | 勤勉で目標志向 |
2. DISTINCT 句の使用 –
クエリ
SELECT dept_id, GROUP_CONCAT ( DISTINCT strength) as 'employees strengths' FROM employee GROUP BY dept_id;>
出力
| 部門ID | 従業員の強み |
|---|---|
| 1 | 目標志向、勤勉 |
| 2 | リーダーシップ、時間厳守、学習の早さ、責任感 |
| 3 | クリティカルシンキング、勤勉、傾聴、自発的 |
3. ORDER BY 句の使用 –
クエリ
SELECT dept_id, GROUP_CONCAT ( DISTINCT emp_id ORDER BY emp_id SEPARATOR ', ') as 'employees ids' FROM employee GROUP BY dept_id;>
ここ、 区切り文字「,」 値はカンマ ( 、 ) と空白文字。
出力
| 部門ID | 従業員ID |
|---|---|
| 1 | 5 |
| 2 | 1、2 |
| 3 | 3.4 |
単一フィールド内の異なる列の複数の行を連結するにはどうすればよいですか?
ここまで、GROUP_CONCAT() 関数を使用して、同じ列に属する複数の行の値をグループ化する方法を見てきました。しかし、使用すると、 concat() 関数と group_concat() 関数を一緒に使用すると、異なる行の複数の列の値を 1 つのフィールドに結合できます。
例:
上記のテーブルの従業員を考慮すると、2 番目のクエリで従業員 ID とともに従業員の強みを見つけたい場合は、次のように記述されます。
SELECT dept_id, GROUP_CONCAT ( strengths SEPARATOR ' ') as 'emp-id : strengths' FROM ( SELECT dept_id, CONCAT ( emp_id, ':', GROUP_CONCAT(strength SEPARATOR', ') ) as 'strengths' FROM employee GROUP BY emp_id ) as emp GROUP BY dept_id;>
説明:
上記のクエリは 2 つで構成されます SELECT ステートメント 内側のものと外側のもの。
内部の SELECT ステートメント -
クエリ
SELECT dept_id, concat ( emp_id, ':', GROUP_CONCAT ( strength separator ', ' ) ) as 'strengths' FROM employee GROUP BY dept_id, emp_id>
emp_id に従って従業員テーブルの行をグループ化します。結果の最初の列には dept_id が表示され、2 番目の列には emp_id とその強みのリストが表示されます。
出力 内部の SELECT ステートメントの場合 -
| 部門ID | 強み |
|---|---|
| 2 | 1: リーダーシップ、責任感、学びの速さ |
| 2 | 2: 時間厳守、すぐに覚えられる |
| 3 | 3: 勤勉、自発的 |
| 3 | 4: 傾聴、批判的思考 |
| 1 | 5: 勤勉で目標志向 |
外側の SELECT ステートメントは、dept_id に従ってこれらの行をグループ化します。
私のモニター画面のサイズはどれくらいですか
出力
| 部門ID | emp-id: 強み |
|---|---|
| 1 | 5: 勤勉で目標志向 |
| 2 | 1: リーダーシップ、責任感、学びの早い人 2: 時間厳守、学びの早い人 |
| 3 | 3: 勤勉、自発的 4: 傾聴、批判的思考 |
注記: GROUP_CONCAT() 関数の結果は最大長に切り詰められます。 1024 これはシステム変数によって与えられます group_concat_max_len 。ただし、 group_concat_max_len 変数の値は、次を使用して実行時に変更できます。 セット コマンドとして-
SET [GLOBAL | SESSION] group_concat_max_len = value; value: It is the new value set to the variable.>