按 Group_concat 内部排序

Posted

技术标签:

【中文标题】按 Group_concat 内部排序【英文标题】:Order by inside Group_concat 【发布时间】:2013-07-24 21:43:12 【问题描述】:

This 是我的小提琴。

表和数据是

create table Table3 (MatchID varchar(10), ItemType varchar(10));
insert into Table3 values
('M001','Fruit'),
('M001','Animal'),
('M002','Fruit'),
('M002','Vehicle');

当您有一个按 MatchID 和 ItemType 排序的选择查询时,它正在返回

select MatchID,ItemType from Table3 order by MatchID,ItemType;

    MATCHID ITEMTYPE
    M001    Animal
    M001    Fruit
    M002    Fruit
    M002    Vehicle

像这样,这是意料之中的,也是正确的。

但是,当我 group_concated 时,它并没有以有序的方式返回。

Select group_concat(ItemType) as typesTomatch ,MatchID
from (select MatchID,ItemType from Table3 
      order by MatchID,ItemType)
c group by MatchID;

它正在返回

TYPESTOMATCH    MATCHID
Fruit,Animal    M001
Fruit,Vehicle   M002

出乎意料

TYPESTOMATCH    MATCHID
Animal,Fruit    M001
Fruit,Vehicle   M002

。为什么 group_concat 的行为如此?如何产生预期的输出?

【问题讨论】:

【参考方案1】:

GROUP_CONCAT() 中尝试ORDER BY

SELECT GROUP_CONCAT(ItemType ORDER BY ItemType) AS typesTomatch , MatchID
FROM Table3 GROUP BY MatchID;

见this SQLFiddle

【讨论】:

你拯救了我的一天。不知道 GROUP_CONCAT() 内部的订单。太酷了 你也踢出了一个结果集.. +1 for all

以上是关于按 Group_concat 内部排序的主要内容,如果未能解决你的问题,请参考以下文章

集合内部先实现按年龄排序再实现以姓名排序

MySQL group_concat() 按 case 语句值排序

MySQL/MariaDB - 按内部子查询排序

按内部 HTML 对超链接数组进行排序

按特定键的内部数组的值对PHP二维数组进行排序[重复]

如何按(多个值)中的位置对 GROUP_CONCAT 列进行排序?