mysql – GROUP_CONCAT更改GROUP BY顺序

前端之家收集整理的这篇文章主要介绍了mysql – GROUP_CONCAT更改GROUP BY顺序前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我有一个VIEW(很多连接)输出按日期ASC排序的数据.按预期工作.

输出类似于:

ID date         tag1   other_data
1  25-03-2011   blue   fff   <=
1  26-03-2011   red    ggg
1  27-03-2011   pink   yyy
2  25-03-2011   red    yyy   <=
2  26-03-2011   orange rrr

如果我申请GROUP BY ID.对于其他列,MysqL输出每个ID的第一个找到的行.我在te docs的某个地方读到了这个.

SELECT * FROM `myVIEW`  
GROUP BY `ID`  
  ID date         tag1  other_data  
  1  25-03-2011   blue   fff   <=
  2  25-03-2011   red    yyy   <=

现在让我们添加一个GROUP_CONCAT(tags1)

SELECT *,CONCAT_GROUP(`tag1`) AS `tags`  
FROM `myVIEW`  
GROUP BY `ID`

由于我应用CONCAT_GROUP,结果变得奇怪.我在期待:

ID date         tag1   other_data   tags
1  25-03-2011   blue   fff          blue,red,pink
2  25-03-2011   red    yyy          red,orange

查询正在返回,例如:

ID date         tag1   other_data   tags
1  26-03-2011   red    ggg          blue,orange

看起来GROUP_CONCAT不再保留VIEW订单.这是正常的吗?

最佳答案

Looks like GROUP_CONCAT no longer preserves the VIEW order. Is this normal?

是的,这是正常的.

您不应该依赖于返回未分组和未分段字段的顺序.

GROUP_CONCAT有自己的ORDER BY子句,优化器会将其考虑在内,并且可以更改解析记录的顺序.

要返回第一条记录以及GROUP_CONCAT,请使用以下命令:

SELECT  m.*,gc
FROM    (
        SELECT  id,MIN(date) AS mindate,GROUP_CONCAT(tags) AS gc
        FROM    myview
        GROUP BY
                id
        ) md
JOIN    m.*
ON      m.id = md.id
        AND m.date = md.mindate
原文链接:https://www.f2er.com/mysql/433593.html

猜你在找的MySQL相关文章