【问题标题】:How to use order by along with group_concat如何与 group_concat 一起使用 order by
【发布时间】:2015-09-11 21:31:31
【问题描述】:

我在数据库中有以下数据

ID   |  AId            | field           | Value        | internalOrder |
-------------------------------------------------------------------------
| 86 |             193 | h1              | v1           |             1 |
| 43 |             193 | default         | default      |             2 | 

我想获得按 internalOrder groupedBy Aid 排序的串联字段、值和 internalOrder。 所以结果应该是这样的

193 | h1,default | v1,default | 1,2

我尝试了一些东西。

select Aid,group_concat(field), group_concat(value), group_concat(internalOrder order by internalOrder ASC) from table1 group by Aid order by Aid;

这会产生如下结果:

|193 | default,h1 | default,v1 | 1,2 

这是错的。

如何产生想要的结果?

【问题讨论】:

标签: mysql


【解决方案1】:

我觉得这些sql对你有用。

select Aid,group_concat(field order by field), 
group_concat(value order by value), 
group_concat(internalOrder order by internalOrder ASC) 
from table1 group by Aid order by Aid;

谢谢你..

【讨论】:

  • 虽然他没有说清楚,但我认为他们想要的是按internalOrder 对所有分组值进行排序,而您的代码将自己对每个分组值进行排序。
【解决方案2】:

您需要在所有group_concat() 操作中包含order by。这是当地的“订购”。它不适用于整个查询:

select Aid, group_concat(field order by internalOrder) as fields, 
       group_concat(value order b internalOrder) as values,
       group_concat(internalOrder order by internalOrder ASC) as internalOrders
from table1
group by Aid order by Aid;

另请注意,这与查询本身的order by 是分开的。该 order by 对 group_concat() 中的 order 没有一致的影响。

【讨论】:

    【解决方案3】:

    试试下面-

    select Aid,group_concat(field order by internalOrder ASC), 
    group_concat(value order by internalOrder ASC), 
    group_concat(internalOrder order by internalOrder ASC) 
    from table1 group by Aid order by Aid;
    

    【讨论】:

      猜你喜欢
      • 2014-01-30
      • 1970-01-01
      • 2012-01-27
      • 1970-01-01
      • 2015-06-28
      • 2013-02-04
      • 1970-01-01
      • 1970-01-01
      • 2020-06-22
      相关资源
      最近更新 更多