GROUP_CONCATとDISTINCTの合わせ技が結構便利な気がするのでメモ。
以下の様なデータが登録されているテーブルがあるとする。
mysql> SELECT * FROM TEST1; +----+------+------+ | id | val1 | val2 | +----+------+------+ | 1 | 100 | 115 | | 2 | 100 | 100 | | 3 | 120 | 100 | | 4 | 100 | 115 | | 5 | 100 | 115 | +----+------+------+
GROUP_CONCATでまとめる。
mysql> SELECT GROUP_CONCAT(val1) val1 FROM TEST1 GROUP BY val2;
+-------------+ | val1 | +-------------+ | 100,120 | | 100,100,100 | +-------------+
GROUP_CONCATでまとめるだけだと、val1の中に重複した値が残ってしまう。
こういった値を無くしたい場合に使えるのがDISTINCTである。
SELECT GROUP_CONCAT(DISTINCT val1) val1 FROM test GROUP BY val2;
+---------+ | val1 | +---------+ | 100,120 | | 100 | +---------+
重複していたデータが消えてすっきり。