SQL - 为什么这3个查询的结果没有加起来?

时间:2014-09-02 16:05:08

标签: mysql sql

以下3个查询中的每个查询都会显示一系列月份以及每月创建的报价数量。数据库中的每个引号都有一个与之关联的用户名,即该人的电子邮件地址。

我认为QUERY 1中任何一个月的总数应该是QUERY 2中该月的数字加上QUERY 3中那个月的数字。但是它们并没有加起来。

例如,我原以为我会得到类似的东西:

QUERY NUMBER 1
Aug 2013 -> 2836

QUERY NUMBER 2
Aug 2013 -> 2500

QUERY NUMBER 3
Aug 2013 -> 325

所以2500(QUERY NUMBER 2)+ 325(QUERY NUMBER 3)= 2825而不是2836(QUERY NUMBER 1) 而且我不确定为什么它不能给我2836

查看下面的查询,为什么不查询2 + QUERY 3 = QUERY 1? 只有一行发生变化:

WHERE created_by_username = 'sysadmin@mydomain.co.uk'

//QUERY NUMBER 1  
SELECT DATE_FORMAT(created,'%b %Y'),
       COUNT(DISTINCT username)
FROM view_all_quotes
GROUP BY DATE_FORMAT(created,'%b %Y')
ORDER BY created ASC

//QUERY NUMBER 2  
SELECT DATE_FORMAT(created,'%b %Y'),
       COUNT(DISTINCT username)
FROM view_all_quotes
WHERE created_by_username = 'sysadmin@mydomain.co.uk'
GROUP BY DATE_FORMAT(created,'%b %Y')
ORDER BY created ASC

//QUERY NUMBER 3  
SELECT DATE_FORMAT(created,'%b %Y'),
       COUNT(DISTINCT username)
FROM view_all_quotes
WHERE created_by_username <> 'sysadmin@mydomain.co.uk'
GROUP BY DATE_FORMAT(created,'%b %Y')
ORDER BY created ASC

很抱歉,我无法找到文档来建议在这些帖子中格式化SQL。

2 个答案:

答案 0 :(得分:3)

两个created_by_username条款将排除nullwhere的行。

您可以使用以下命令找到这些行:

select * from view_all_quotes where created_by_username is null

答案 1 :(得分:0)

当我写这个问题时,我认为错误出现在我创建的查询中。但是自从编写它以来,我发现查询没有任何问题,并且没有任何记录丢失。

但是有少量用户名出现在BOTH QUERY 2和QUERY 3(正确)中,因此QUERY 1组合了这些用户名,这意味着QUERY 1返回的值/结果小于QUERY 2 + QUERY 3希望这是有道理的。很抱歉浪费任何人的时间。我在写这个问题的时候没有意识到答案会出现在我只能看到的数据中。

再次感谢。