多年后,我们应该放弃在 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将需要改变。例如,您可以连接定义组的值。
通过使用两个字符的分隔符,您可以确保每个名称之间有一个空格。