GROUP_CONCAT 编号

2023-12-09

是否可以在 GROUP_CONCAT 中进行编号

like

如果,来自 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 >

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


多年后,我们应该放弃在 a 中改变变量select语句,从 MySQL 8 开始我们可以使用标准方式,带有窗口函数:

with base as (
      select   dep, 
               empnam,
               count(*) over (partition by dep order by empnam) num
      from     t)
select   dep,
         group_concat(concat(num, '.', empnam) separator ', ') emps
from     base
group by dep

See 数据库小提琴

原始答案(2016)

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

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

See SQL小提琴 or 数据库小提琴.

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GROUP_CONCAT 编号 的相关文章

随机推荐