Mysql - GROUP_CONCAT - 控制其他/合并列的顺序

时间:2018-03-24 15:00:34

标签: mysql sql-order-by group-concat

给出一个这样的表:

id     number     anotherNumber
1      1          10
2      1          20
3      2          20
4      2          10
5      3          10

如果我运行查询:

Select *, GROUP_CONCAT(number)
FROM docs
GROUP BY number

我会得到:

id  number  anotherNumber   GROUP_CONCAT(number)
1   1       10              1,1
3   2       20              2,2
5   3       10              3

see sql fiddle

但是我想得到:

id  number  anotherNumber   GROUP_CONCAT(number)
1   1       20              1,1
3   2       20              2,2
5   3       10              3

基本上我希望anotherNumber列中的数字按照DSEC顺序排序 - 它应该始终是最高的。

我知道你可以放ORDER BYin the GROUP_CONCAT,但这只会影响连接值,而不会影响“合并的值”。那有一个简单的方法吗?

2 个答案:

答案 0 :(得分:2)

您可以使用:

Select MIN(id) AS ID, number, MAX(anotherNumber) AS anotherNumber,
       GROUP_CONCAT(number)
FROM docs
GROUP BY number;

<强> SQLFiddle Demo

您应始终使用聚合函数包装未在GROUP BY中指定的列(除非它们在功能上依赖于GROUP BY列,并且您的RDBMS支持ANSI-99 Optional feature T301, Functional dependencies

答案 1 :(得分:0)

以下代码是获得所需结果的简便方法:

SELECT id, number, MAX(anotherNumber) AS anotherNumber, GROUP_CONCAT(number)
FROM docs
GROUP BY number;

我还附上了SQLFiddle

你可以检查一下。祝你好运!