group concat 2 values when子句只返回1

时间:2013-08-23 02:23:15

标签: mysql sql group-by group-concat

我有以下数据

customer_id | text     | i
---------------------------
001         | hi       | 0
001         | all      | 1
002         | do       | 0
002         | not      | 0
003         | copy     | 0

在我的查询中,我group_concat文字的值,所以我应该得到像这样的结果

customer_id | text     
---------------------------
001         | hi all
002         | do not
003         | copy

现在我只想要group_concat customer_ids,即使有1个记录我已经设置为1,而我可以轻松地做到当customer_id 001有两个记录时i值设置为1当只有1个已设置时我只得到该

导致上述数据的情况就是首先客户001只有“hi”但是一段时间之后“全部”被添加,所以我现在想用这个数据更新客户

有一个客户表有客户ID但是我不能在客户ID上设置更新标志,因为该表有不同的数据需要更长的时间来处理,而上面的数据是针对一个单独的系统

我的查询目前看起来像

SELECT GROUP_CONCAT(text,' ') FROM table
WHERE i = 1
GROUP BY customer_id

为了让customer_id 001返回“hi all”,当2个记录的i值中只有1个为1而同时没有从customer_id的002或003获取任何内容时,我需要做些什么

3 个答案:

答案 0 :(得分:1)

我不确定你的意思是“没有从顾客002和003得到任何东西”。以下过滤掉它们:

SELECT GROUP_CONCAT(text,' ')
FROM table
GROUP BY customer_id
HAVING max(i) = 1;

答案 1 :(得分:1)

您可以使用EXIST()

SELECT  customer_id, GROUP_CONCAT(text SEPARATOR ' ') result
FROM    tableName a
WHERE   EXISTS
        (
            SELECT  1
            FROM    tableName b
            WHERE   a.customer_id = b.customer_id  AND b.i = 1
        )
GROUP   BY customer_id 

答案 2 :(得分:1)

您可以连接所有值,并获得总i值。然后你可以通过这个字段进行过滤,知道如果该组中至少有一个有1,它就会出现

selec customer_id, text from
(SELECT customer_id, GROUP_CONCAT(text,' ') as text, sum(i) as total FROM table
WHERE i = 1
GROUP BY customer_id) T
where total > 0