GROUP_CONCAT 限制为 100 个值不起作用

Posted

技术标签:

【中文标题】GROUP_CONCAT 限制为 100 个值不起作用【英文标题】:GROUP_CONCAT limiting to 100 values is not working 【发布时间】:2017-02-27 22:37:27 【问题描述】:

我试图提取限制为 100 并按每个帐户分组的修改历史字段的总和,但下面的查询从 CDR_Accounts 中提取所有行的总和,charged_quantity = 60 并且不限于 100。

table1 = table2 这些是临时表。我已经简化了查询并过滤了临时表中的所有数据。

尽管如此,查询仍然给我所有“历史”字段的总和,但我只需要其中 100 个字段的总和。

table1/table2 格式:

+-----------+----------+------------+-------------+----------------------+
| i_account | id       | account_id | CLD         | history              |
+-----------+----------+------------+-------------+----------------------+
|     10272 | 46479968 | 0814781293 | 27815212963 | +1x60@1.32d100%=1.32 |
|      6316 | 46480100 | 0813741427 | 27780233136 | +1x60@1.32d100%=1.32 |
|      6316 | 46480107 | 0813741427 | 27780233136 | +1x60@1.32d100%=1.32 |
|     13830 | 46480435 | 0814346396 | 27781356515 | +1x60@1.32d100%=1.32 |
|     13830 | 46480436 | 0814346396 | 27781356515 | +1x60@1.32d100%=1.32 |
+-----------+----------+------------+-------------+----------------------+

帐户

SELECT sum(SUBSTRING_INDEX(history,'=',-1)),
                 cdr.i_account,
                 cdr.account_id
         FROM table1 cdr
           WHERE cdr.id IN
               (SELECT SUBSTRING_INDEX(group_concat(s.id SEPARATOR ','), ',', 100) id
                FROM table2 s
                GROUP BY id
                )
                  GROUP BY i_account;

【问题讨论】:

@Tim Biegeleisen 目的是限制到100,不管是否使用'limit' 我不认为 group_concat 可以按照您尝试的方式使用。 group_concat 创建一个逗号分隔的字符串。所以你 where 的开头看起来像这样:WHERE '60' IN ('10,20,40,60')。您可能可以将该子选择更改为 (SELECT charged_quantity FROM CDR_Accounts GROUP BY i_account LIMIT 100) @CptMisery 限制子查询在 mysql 中是不可能的。另外,我已经修改了查询,但它仍然给我不期望的结果 啊。对不起。我正在考虑将子查询作为连接(即JOIN (SELECT id FROM table LIMIT 10) AS x ON)。 【参考方案1】:

我不清楚您的查询是做什么的。但是,限制适用于最终结果,其中也包括分组。如果需要对 GROUP_CONCAT 的结果进行限制,请先应用限制,然后再应用分组

【讨论】:

以上是关于GROUP_CONCAT 限制为 100 个值不起作用的主要内容,如果未能解决你的问题,请参考以下文章

MYSQL中group_concat有长度限制!默认1024(转载)

将 group_concat 的结果集限制为实际结果

在 SQL Server Compact 中加入逗号分隔值不起作用

有没有人发现限制 group_concat 行的(简单)方法?

解决Mysql group_concat长度限制

MySQL 查询 IN GROUP_CONCAT 不起作用