表table_a 如下
+----+------------+----------+
| id | subject_id | audio_id |
+----+------------+----------+
| 16 | 4 | 4993 |
| 17 | 4 | 4994 |
| 18 | 4 | 4995 |
| 19 | 4 | 4996 |
| 20 | 4 | 3964 |
| 21 | 4 | 4977 |
| 22 | 5 | 4978 |
| 23 | 5 | 4979 |
| 24 | 5 | 4980 |
| 25 | 5 | 4981
| 26 | 5 | 4982 |
| 27 | 5 | 4983 |
| 28 | 6 | 4984 |
| 29 | 6 | 4985 |
| 30 | 6 | 4986 |
+----+------------+----------+
现在想按照subject_id分组 得到类似如下的结果 subject_id | audio_id的链接串
------------+-------------------------+
4 | 4993,4994,4995,4996
5 | 4978,4979,4980,4981
请问 sql怎么写效率高啊? 能实现吗?
+----+------------+----------+
| id | subject_id | audio_id |
+----+------------+----------+
| 16 | 4 | 4993 |
| 17 | 4 | 4994 |
| 18 | 4 | 4995 |
| 19 | 4 | 4996 |
| 20 | 4 | 3964 |
| 21 | 4 | 4977 |
| 22 | 5 | 4978 |
| 23 | 5 | 4979 |
| 24 | 5 | 4980 |
| 25 | 5 | 4981
| 26 | 5 | 4982 |
| 27 | 5 | 4983 |
| 28 | 6 | 4984 |
| 29 | 6 | 4985 |
| 30 | 6 | 4986 |
+----+------------+----------+
现在想按照subject_id分组 得到类似如下的结果 subject_id | audio_id的链接串
------------+-------------------------+
4 | 4993,4994,4995,4996
5 | 4978,4979,4980,4981
请问 sql怎么写效率高啊? 能实现吗?
from table_a
from table_a
group by subject_id;
+------+------------+----------+
| id | subject_id | audio_id |
+------+------------+----------+
| 16 | 4 | 4993 |
| 17 | 4 | 4994 |
| 18 | 4 | 4995 |
| 19 | 4 | 4996 |
| 20 | 4 | 3964 |
| 21 | 4 | 4977 |
| 22 | 5 | 4978 |
| 23 | 5 | 4979 |
| 24 | 5 | 4980 |
| 25 | 5 | 4981 |
| 26 | 5 | 4982 |
| 27 | 5 | 4983 |
| 28 | 6 | 4984 |
| 29 | 6 | 4985 |
| 30 | 6 | 4986 |
+------+------------+----------+
15 rows in set (0.00 sec)mysql>
mysql> select subject_id,group_concat(audio_id)
-> from t_table_a
-> group by subject_id;
+------------+-------------------------------+
| subject_id | group_concat(audio_id) |
+------------+-------------------------------+
| 4 | 4993,4994,4995,4996,3964,4977 |
| 5 | 4983,4982,4981,4980,4979,4978 |
| 6 | 4984,4985,4986 |
+------------+-------------------------------+
3 rows in set (0.05 sec)mysql>
select subject_id,group_concat(DISTINCT audio_id)
from t_table_a
group by subject_id
order by subject_id;