给出一个这样的表:
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
但是我想得到:
id number anotherNumber GROUP_CONCAT(number)
1 1 20 1,1
3 2 20 2,2
5 3 10 3
基本上我希望anotherNumber
列中的数字按照DSEC顺序排序 - 它应该始终是最高的。
我知道你可以放ORDER BY
in the GROUP_CONCAT
,但这只会影响连接值,而不会影响“合并的值”。那有一个简单的方法吗?
答案 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。
你可以检查一下。祝你好运!