我有一个会返回值的查询,但我需要它们作为单独的输出以逗号分隔..
所以我试着用逗号连接输出但它不起作用?
select id from videos where duration=0; /// this would return some rows
我尝试了concat和concat_ws但是没有工作
select concat(select concat(id,',') from videos where duration=0);
select concat((select id from videos where duration=0),',');
select concat_ws(',',(select id from videos where duration=0));
我需要逗号separtor的所有行的id
例如输出应为1,4,6,78,565
任何想法?
答案 0 :(得分:37)
这是group_concat的作用。
select group_concat(id) as video_list
from videos
where duration=0
答案 1 :(得分:9)
尝试使用GROUP_CONCAT
GROUP_CONCAT([DISTINCT] expr [,expr ...]
[ORDER BY {unsigned_integer | col_name | expr}
[ASC | DESC] [,col_name ...]]
[SEPARATOR str_val])
参考:http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat
答案 2 :(得分:7)
使用group_concat:
此函数返回字符串结果,其中包含来自组的连接非NULL值。如果没有非NULL值,则返回NULL。
SELECT
GROUP_CONCAT(id)
FROM
videos
WHERE
duration=0
答案 3 :(得分:0)
要解决无法将LIMIT
与GROUP_CONCAT
一起使用的情况,可以按子查询的结果进行分组
此查询将您的视频ID分成20组(但在某些数据集上可能确实很慢)
select group_concat(v.id) as video_list
from videos as v
where v.duration=0
group by (
select floor(count(v2.id)/20)
from videos as v2
where v2.duration=0
and v2.id <= v.id
)
或者,如果您有很多结果但不希望查询如此缓慢,则可以将group_concat_max_len
(https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_group_concat_max_len)的大小增加到max_allowed_packet
(https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_max_allowed_packet),如果还不够长,则还必须增加max_allowed_packet大小。