GROUP_CONCAT编号

时间:2016-07-19 05:08:47

标签: mysql group-concat

是否可以在GROUP_CONCAT

中编号

喜欢

如果,来自GROUP_CONCAT(empnam SEPARATOR',')

我得到一套,

 < JohnM, DannyP, TiffnyK, KarlM >

我需要

 < 1.JohnM, 2.DannyP, 3.TiffnyK, 4.KarlM >  

我试过了,但没有得到理想的结果。

    SET @x:=0;

    SELECT 

            GROUP_CONCAT(@x:=@x+1,' ', s.empnam SEPARATOR ',   ') AS emps,  @x:=0 
    < tables >
    < filters >

是否可以在查询级别,或者我必须在应用程序端执行此操作?

2 个答案:

答案 0 :(得分:2)

你可以在应用程序端执行此操作,但在MySql中它肯定是可能的。在下面的查询中,我假设您按名称对名称进行分组,例如他们的部门(我称之为 dep )。这是为了说明计数器从每个新组的1开始。

select   dep, 
         group_concat( 
             concat(@i := if (@grp = dep, @i + 1, if(@grp := dep,1,1)), '.', empnam) 
             separator ', ') emps
from     t
group by dep;

请参阅SQL fiddle

确保将您的表名放在from子句中,并使用您想要分组的实际字段。如果您要分组多个字段,则需要更改分配给 @i 的表达式。例如,您可以连接定义组的值。

通过使用两个字符的分隔符,您可以确保在每个名称之间留一个空格。

答案 1 :(得分:1)

试试这个:

SET @x:=0;

SELECT 
        GROUP_CONCAT(CONCAT(@x:=@x+1, '.', s.empnam) SEPARATOR ',   ') AS emps,  @x:=0 
< tables >
< filters >