mysql – GROUP_CONCAT更改GROUP BY顺序

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

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

输出类似于:

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

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

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

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

  1. SELECT *,CONCAT_GROUP(`tag1`) AS `tags`
  2. FROM `myVIEW`
  3. GROUP BY `ID`

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

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

查询正在返回,例如:

  1. ID date tag1 other_data tags
  2. 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,请使用以下命令:

  1. SELECT m.*,gc
  2. FROM (
  3. SELECT id,MIN(date) AS mindate,GROUP_CONCAT(tags) AS gc
  4. FROM myview
  5. GROUP BY
  6. id
  7. ) md
  8. JOIN m.*
  9. ON m.id = md.id
  10. AND m.date = md.mindate

猜你在找的MySQL相关文章