如何仅使用“group_concat”过滤表 mysql 中的行

Posted

技术标签:

【中文标题】如何仅使用“group_concat”过滤表 mysql 中的行【英文标题】:how to use 'group_concat' only to filtered rows from a table mysql 【发布时间】:2012-11-11 13:06:09 【问题描述】:

它有一列 IsDisabled 我只想将 group_concat 用于 IsDisabled=0 的行

目前我正在使用

select parentid,group_concat(REPLACE(WhatDoYouSell, ',', '')) sales from table_name
group by parentid

如果该行只有IsDisabled=0,我想使用group_concat 到WhatDoYouSell

我试过了

select parentid,group_concat(REPLACE(WhatDoYouSell, ',', '')) sales from table_name
where IsDisabled=0 
group by parentid

如果recoeds之一IsDisabled =1,查询似乎忽略了所有group by parentid records

【问题讨论】:

【参考方案1】:

用内部条件试试这个查询 -

CREATE TABLE table_name(
  parentid INT(11) DEFAULT NULL,
  WhatDoYouSell INT(11) DEFAULT NULL,
  IsDisabled INT(11) DEFAULT NULL
);
INSERT INTO table_name(parentid, WhatDoYouSell, IsDisabled) VALUES
(1, 1, 0),
(1, 2, 1),
(1, 3, 0),
(2, 1, 1),
(2, 2, 1);

SELECT
  parentid,
  GROUP_CONCAT(IF(IsDisabled = 0, WhatDoYouSell, NULL)) sales
FROM
  table_name
GROUP BY
  parentid;

+----------+-------+
| parentid | sales |
+----------+-------+
|        1 | 1,3   |
|        2 | NULL  |
+----------+-------+

【讨论】:

我稍微简化了表格,WhatDoYouSell 字段创建为 INT。【参考方案2】:

试试这个:

SELECT parentid,GROUP_CONCAT(REPLACE(WhatDoYouSell, ',', '')) sales
FROM (SELECT parentid, WhatDoYouSell FROM  table_name 
WHERE IsDisabled=0 ) AS A
GROUP BY parentid

【讨论】:

不可能。上传您的创建表脚本,其中包含执行我的查询后获得的输出示例数据。

以上是关于如何仅使用“group_concat”过滤表 mysql 中的行的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 group_concat 和左连接计算 mysql 查询的结果

MySQL 的 GROUP_CONCAT 函数详解

GROUP_CONCAT 和 FIND_IN_SET,多个连接

如何包含两个表中的所有值? group_concat 和其他值

Mysql count group_concat 高级用法(count 过滤条件,group_concat过滤条件)

如何在多个 JOIN 上使用 GROUP_CONCAT