GROUP_CONCAT 编号
GROUP_CONCAT numbering
是否可以在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 >
是否可以在查询级别执行,或者我必须在应用程序端执行?
试试这个:
SET @x:=0;
SELECT
GROUP_CONCAT(CONCAT(@x:=@x+1, '.', s.empnam) SEPARATOR ', ') AS emps, @x:=0
< tables >
< filters >
多年后,我们应该放弃在 select
语句中改变变量,因为从 MySQL 8 开始我们可以使用标准方式,使用 window 函数:
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
原始答案 (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;
见SQL fiddle
或 db-fiddle.
确保将您的 table 名称放在 from
子句中,并使用您要分组的实际字段。如果您有多个字段作为分组依据,分配给 @i 的表达式将需要更改。例如,您可以连接定义组的值。
通过使用两个字符的分隔符,您可以确保每个名称之间有一个 space。
是否可以在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 >
是否可以在查询级别执行,或者我必须在应用程序端执行?
试试这个:
SET @x:=0;
SELECT
GROUP_CONCAT(CONCAT(@x:=@x+1, '.', s.empnam) SEPARATOR ', ') AS emps, @x:=0
< tables >
< filters >
多年后,我们应该放弃在 select
语句中改变变量,因为从 MySQL 8 开始我们可以使用标准方式,使用 window 函数:
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
原始答案 (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;
见SQL fiddle 或 db-fiddle.
确保将您的 table 名称放在 from
子句中,并使用您要分组的实际字段。如果您有多个字段作为分组依据,分配给 @i 的表达式将需要更改。例如,您可以连接定义组的值。
通过使用两个字符的分隔符,您可以确保每个名称之间有一个 space。