加入收藏 | 设为首页 | 会员中心 | 我要投稿 财气旺网 - 财气网 (https://www.caiqiwang.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

mysql – GROUP_CONCAT更改GROUP BY顺序

发布时间:2021-04-01 17:52:22 所属栏目:MySql教程 来源:网络整理
导读:我有一个VIEW(很多连接)输出按日期ASC排序的数据.按预期工作. 输出类似于: ID date tag1 other_data1 25-03-2011 blue fff 如果我申请GROUP BY ID.对于其他列,MySQL输出每个ID的第一个找到的行.我在te docs的某个地方读到了这个. SELECT * FROM `myVIEW` GR

我有一个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

(编辑:财气旺网 - 财气网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!