在group_concat中排序

Sha*_*yar 3 mysql sql group-by group-concat

数据:

id  uid     type

1   20      A
2   20      B
3   20      A
4   6       A
5   1       A
6   3       A
7   6       A
8   1       B
Run Code Online (Sandbox Code Playgroud)

场景:

我想分组type并按排序id。我正在使用分组依据对分组uid

当前查询:

SELECT
    type,
    GROUP_CONCAT(DISTINCT uid) AS users,
    COUNT(type) AS typeCount
FROM
    `test2`
GROUP BY
    type
Run Code Online (Sandbox Code Playgroud)

问题:

但是的顺序uid是不正确的,它应根据降序排列id

预期结果:

type    users       typeCount
A       6,3,1,20    6
B       1,20        2
Run Code Online (Sandbox Code Playgroud)

我的结果:

type    users       typeCount
A       20,6,1,3    6
B       20,1        2
Run Code Online (Sandbox Code Playgroud)

mit*_*oft 5

MySQL的神秘。

实际上,无论您通过ID要求DESC,引擎都将按照ASC顺序获取第一个值,因此请首先“翻转”表,然后:

SELECT
    type,
    GROUP_CONCAT(DISTINCT uid ORDER BY id DESC) AS users,
    COUNT(type) AS typeCount
FROM
    (SELECT * FROM `test2` ORDER BY id DESC) test2
GROUP BY
    type
Run Code Online (Sandbox Code Playgroud)

SQLFiddleDemo