2012-10-06 48 views
0

我运行了一项调查,所有答案都存储在“调查”表中的单独一行中。 我的表看起来像这样:从mysql中的2行合并搜索

(ID,user_id,Q,A) 
(1,10,'laundry','oxiclean') 
(2,10,'laundry','tide') 
(3,10,'laundry','pods') 
(4,11,'laundry','spray n wash') 
(5,11,'laundry','resolve') 
(6,12,'laundry','oxiclean') 
(7,13,'laundry','oxiclean') 

我现在需要拉用户ID是只选择特定产品的数量。

"SELECT *, count(user_id) FROM survey WHERE Q='laundry' GROUP BY a" 

上面会给出一个总的计数,但我需要根据所选择的只有“oxiclean”例如我的用户数。这应该返回2.

或仅选择'oxiclean'和'潮'的用户。

我该如何去执行从不同行中拉出的结果的'组合'?

非常感谢!

+0

哪里Q ='洗衣'AND A ='oxiclean'?此外,似乎有三个,而不是两个。 –

+0

用户ID = 10有多个答案,包括'oxiclean'。我需要那些回答'oxiclean'而没有别的用户。所以,实际上只有2个用户只回答'oxiclean'。我在寻找的是如何做出唯一的选择条款。谢谢。 – bruno

回答

1
select user_id from survey group by user_id having count(user_id) = 1 

这将检索调查中只有一个答案的用户列表。使用它作为一个过滤条件:

select q,a,count(user_id) 
from survey 
where a = 'oxiclean' 
and user_id in (select user_id from survey group by user_id having count(user_id) = 1) 
0

可以实现,使用一个subquery,为你的情况这将是类似的东西:

SELECT *, COUNT(user_id) 
FROM survey AS s 
WHERE Q = 'laundry' 
AND A = 'oxiclean' 
AND user_id NOT IN (SELECT user_id FROM survey WHERE Q = s.Q AND A != s.A); 

s.Qs.A参考上级字段,以便您不必再次重新输入名称。
缺点:只有当你想要一个特定的答案时,查询才有效。

如果你想要一个查询,以获得总计数,这一块应该做的伎俩:

SELECT A, COUNT(user_id) 
FROM (
    SELECT A, user_id 
    FROM survey 
    WHERE Q='laundry' 
    GROUP BY user_id 
    HAVING COUNT(user_id) = 1 
) AS t 
GROUP BY A 

缺点:查询只给谁只有至少一个唯一的user_id所看到here的答案,这语法创建一个临时表,这是为了避免性能方面的问题。