在MEMSQL中使用ORDER的GROUP CONCAT

时间:2018-01-29 18:16:04

标签: mysql sql memsql

这是一个玩具示例:

CREATE TABLE TEST
(
    ID INT,
    AGG NVARCHAR(20),
    GRP NVARCHAR(20)
);

INSERT INTO TEST VALUES
    (1, 'AB', 'X'), (2, 'BC', 'X'), (3, 'AC', 'X'),
    (4, 'EF', 'Y'), (5, 'FG', 'Y'), (6, 'DC', 'Y'),
    (7, 'JI', 'Z'), (8, 'IJ', 'Z'), (9, 'JK', 'Z');

现在,我想这样做(这是MySQL中的有效代码,但不是MEMSQL中的代码):

SELECT
    COUNT(*),
    SUM(ID),
    GROUP_CONCAT(AGG ORDER BY AGG),
    GRP
FROM TEST
GROUP BY GRP

这样输出看起来像(必需输出)

3   6   AB,AC,BC    X
3   15  DC,EF,FG    Y
3   24  IJ,JI,JK    Z

请注意,第三列中的值按行排序。我的输出看起来像(当前错误的输出)

3   6   BC,AB,AC    X
3   15  DC,EF,FG    Y
3   24  IJ,JI,JK    Z

比较第三列中的每一行,列表都已排序。

但是,由于上述查询在MEMSQL中无效,我必须删除ORDER BY AGG中的GROUP_CONCAT部分,这会导致第三列无法排序。

根据documentation of GROUP_CONCAT,表达式也可以是一个函数,但是,没有内置函数可以排序。我在SELECT ... ORDER BY中尝试了许多GROUP_CONCAT语句的组合而没有成功。这是不可能做到的,还是我错过了什么?

2 个答案:

答案 0 :(得分:2)

我认为这适用于我的情况。

@media screen and (max-width: 1000px) {
  container {
    width: 100%;
  }
}

相当令人费解,所以我希望有人可以提出改进建议。

答案 1 :(得分:0)

试试这个:

SELECT
    COUNT(*),
    SUM(ID),
    GROUP_CONCAT(AGG),
    GRP
FROM TEST
GROUP BY GRP
ORDER BY GROUP_CONCAT(AGG)