在SQLite中使用GROUP_CONCAT函数内的ORDER BY子句

con*_*ius 6 sql sqlite group-concat

我不认为我可以ORDER BYGROUP_CONCAT函数内部使用子句.

有没有人知道实现这种行为的棘手方法SQLite

我之前看过这个问题.但我有一个复杂的查询.

我的陈述如下:

SELECT
    c.col1, c.col3, m.col3, m.col4,
    count(m.col1), count(re.col2) AS cnt,
    GROUP_CONCAT(p.col1 ORDER BY p.col1) AS "Group1",
    GROUP_CONCAT(p.col2 ORDER BY p.col1) AS "Group2", 
    GROUP_CONCAT(CASE WHEN con.col3 is null THEN p.col1 ELSE con.col3 END),
    con.col4, con.col5, p.col3
FROM t1 re
    INNER JOIN t2  c  ON (re.col1  = c.col1)
    INNER JOIN t3  p  ON (re.col2  = p.col1)
    LEFT JOIN  t4 con ON (con.col1 = p.col2)
    INNER JOIN  t5 m  ON (m.col1   = c.col5) 
GROUP BY re.col1 
Run Code Online (Sandbox Code Playgroud)

Group1并且Group2来自同一个表但不同的列:我想保留Group1with 的顺序Group2:

table t3 
+------+------+
| col1 | col2 |
+------+------+
|    1 | A    |
|    2 | B    |
|    3 | C    |
|    4 | D    |
|    5 | E    |
+------+------+
Run Code Online (Sandbox Code Playgroud)

所以如果Group1看起来2,1,3 Group2应该像这样B,A,C

Mur*_*phy 8

SQLite不支持ORDER BY内部GROUP_CONCAT,但你实际上可以伪造它:

GROUP_CONCAT(list_order || ':' || value)
Run Code Online (Sandbox Code Playgroud)

然后,您需要在代码中拆分结果,以便返回您的排序和值.


con*_*ius -3

我已经尝试过了,它成功了

SELECT
    c.col1, c.col3, m.col3, m.col4,
    count(m.col1), count(re.col2) AS cnt,
    GROUP_CONCAT(p.col1 ORDER BY p.col1) AS "Group1",
    GROUP_CONCAT(p.col2 ORDER BY p.col1) AS "Group2", 
    GROUP_CONCAT(CASE WHEN con.col3 is null THEN p.col1 ELSE con.col3 END),
    con.col4, con.col5, p.col3
FROM t1 re
    INNER JOIN t2 c   ON (re.col1  = c.col1)
    INNER JOIN (
        SELECT col1, col2, col3, col4, col5 FROM t3 ORDER BY col1
    ) AS          p   ON (re.col2  = p.col1)
    LEFT JOIN  t4 con ON (con.col1 = p.col2)
    INNER JOIN t5 m   ON (m.col1   = c.col5) 
GROUP BY re.col1 
Run Code Online (Sandbox Code Playgroud)

  • 这在 sqlite 中不起作用。它在 ORDER 处失败,就像上面的 zapl 所说的那样 (3认同)