gpt4 book ai didi

mysql - MEMSQL 中带 ORDER 的 GROUP CONCAT

转载 作者:行者123 更新时间:2023-11-29 02:12:19 25 4
gpt4 key购买 nike

这是一个玩具示例:

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 中无效,我必须删除 GROUP_CONCAT 中的 ORDER BY AGG 部分,这会导致第三列无法排序。

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

最佳答案

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

SELECT
COUNT(*),
SUM(T.ID),
GROUP_CONCAT(T.AGG),
T.GRP
FROM (
SELECT
*,
RANK() OVER(PARTITION BY GRP ORDER BY AGG) AS R
FROM TEST
) T
GROUP BY T.GRP
ORDER BY T.R

比较复杂,希望有人能提出改进建议。

关于mysql - MEMSQL 中带 ORDER 的 GROUP CONCAT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48507570/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com