concat子查询的输出?

时间:2010-09-28 12:51:47

标签: mysql

我有一个会返回值的查询,但我需要它们作为单独的输出以逗号分隔..

所以我试着用逗号连接输出但它不起作用?

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

任何想法?

4 个答案:

答案 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)

要解决无法将LIMITGROUP_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_lenhttps://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_group_concat_max_len)的大小增加到max_allowed_packethttps://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_max_allowed_packet),如果还不够长,则还必须增加max_allowed_pa​​cket大小。