page_adsence

2013年8月7日水曜日

GROUP_CONCATとDISTINCTの合わせ技

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     |
+---------+

重複していたデータが消えてすっきり。