两个mysql查询中的条件

时间:2010-03-29 11:36:59

标签: mysql

我有一张如下表格

|date|dom|guid|pid|errors|QA|comm|
|2010-03-22|xxxx.com|jsd3j234j|ab|Yes|xxxxxx|bad|
|2010-03-22|xxxx.com|jsd3j234j|ab|No|xxxxxx||
|2010-03-22|xxxx.com|jsd3j234j|if|Yes|xxxxxx|bad|
|2010-03-22|xxxx.com|jsd3j234j|if|No|xxxxxx||
|2010-03-22|xxxx.com|jsd3j234j|he|Yes|xxxxxx|bad|
|2010-03-22|xxxx.com|jsd3j234j|he|No|xxxxxx||

我想检索每个“QA”的“dom”总数,还需要“QA”检测到的“错误”计数

SELECT date, count(dom), QA 
  FROM reports 
  WHERE date="2010-03-22" 
  GROUP BY QA
|2010-03-22|2|ab|
|2010-03-22|2|if|
|2010-03-22|2|he|
SELECT date, count(dom), count(errors), QA 
  FROM reports 
  WHERE errors="Yes" 
  GROUP BY QA
|2010-03-22|1|ab|
|2010-03-22|1|if|
|2010-03-22|1|he|

我想结合以上两个查询,是否有可能。

如果我使用以下查询,我无法获得所需的结果。

SELECT date, count(dom), QA, count(errors) 
  FROM reports 
  WHERE date="2010-03-22" 
    AND errors="Yes" 
  GROUP BY QA

我想要以下输出

|2010-03-22|2|ab|1|
|2010-03-22|2|if|1|
|2010-03-22|2|he|1|

2 个答案:

答案 0 :(得分:1)

你可以这样做:

SELECT date, COUNT(dom), QA, COUNT(NULLIF(errors, 'No')) FROM reports WHERE date="2010-03-22" GROUP BY QA

解释其工作原理:COUNT返回非空值的数量。我们可以通过将'No'的错误转换为NULL来使用此优势,因此COUNT将不计算它们。我们使用NULLIF函数执行此操作,如果第一个和第二个参数相等,则返回NULL

答案 1 :(得分:0)

尝试使用OR代替AND

.... date="2010-03-22" OR errors="Yes" GROUP BY QA