このトピックでは、SQL文を使用して複数行のデータを1行にマージする方法について説明します。
サンプルデータ
クラス | 性別 | name |
1 | M | LiLei |
1 | F | HanMM |
1 | M | Jim |
1 | F | HanMM |
2 | F | Kate |
2 | M | Peter |
例
例1: 次のステートメントを実行して、class列の値が同じである行をname列の値に基づいて1つの行にマージし、name列の値を重複排除します。 ネストされたサブクエリを使用して重複排除を実装できます。
SELECT class, wm_concat(distinct ',', name) as names FROM students GROUP BY class;説明wm_concat関数は、データを集約するために使用されます。 詳細については、「集計関数」をご参照ください。次の結果が返されます。
クラス
名前
1
LiLei,HanMM,Jim
2
Kate,Peter
例2: 次のステートメントを実行して、class列の値に基づいて男性と女性の数に関する統計を収集します。
SELECT class ,SUM(CASE WHEN gender = 'M' THEN 1 ELSE 0 END) AS cnt_m ,SUM(CASE WHEN gender = 'F' THEN 1 ELSE 0 END) AS cnt_f FROM students GROUP BY class;次の結果が返されます。
クラス
cnt_m
cnt_f
1
2
2
2
1
1