【问题标题】:How to specify order by which grouping is performed如何指定执行分组的顺序
【发布时间】:2020-06-22 08:01:07
【问题描述】:

有这样的表msg

id, msgNo, frag
1, 1, AAA
2, 1, BBB
3, 1, CCC
4, 2, Hello

我可以得到这样的结果:

msgNo, mesg
1, AAABBBCCC
2, Hello

使用:

SELECT msgNo, STRING_AGG(CONVERT(NVARCHAR(MAX), frag), '') AS mesg
FROM msg
GROUP BY msgNo

问题是,我怎样才能得到这个?:

msgNo, mesg
1, CCCBBBAAA
2, Hello

意思是,我以id 的降序连接字符串。 如果有人能给我一个关于 MySQL 和 Sql Server 的解释,那就太棒了。

【问题讨论】:

  • 对于 MySQL,请参见 GROUP_CONCAT

标签: mysql sql sql-server


【解决方案1】:

试试这个

SELECT msgNo, GROUP_CONCAT(frg ORDER BY frg DESC SEPARATOR '') 
FROM (
   SELECT 1 as id, 1 as msgNo, 'AAA' as frg
   UNION SELECT 2, 1, 'BBB'
   UNION SELECT 3, 1, 'CCC'
   UNION SELECT 4, 2, 'Hello') tbl 
GROUP BY msgNo

您的查询将是

SELECT msgNo, GROUP_CONCAT(frag ORDER BY frag DESC SEPARATOR '') AS mesg
FROM msg
GROUP BY msgNo

【讨论】:

【解决方案2】:

我没有阅读完整的文档...

对于 SQL Server:

SELECT msgNo, STRING_AGG(CONVERT(NVARCHAR(MAX), frag), '') WITHIN GROUP (ORDER BY id ASC) AS mesg
    FROM msg
    GROUP BY msgNo

GROUP_CONCAT 具有类似的功能。

【讨论】:

    猜你喜欢
    • 2011-08-08
    • 2017-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-25
    • 2011-07-09
    相关资源
    最近更新 更多