2014-09-02 81 views
1

下面的3个查询中的每一个都会针对每个月创建的引号数量,吐出一系列的月份。数据库中的每个报价都有一个与其关联的用户名,即该用户的电子邮件地址。SQL - 为什么这3个查询的结果不加起来?

我假设从查询1开始的任何一个月的总数应该是“QUERY 2”中该月的数量加上“查询3”中该月份的数字,但它们不会加起来。

例如,我本来以为我得到这样的:

QUERY NUMBER 1 
Aug 2013 -> 2836 

QUERY NUMBER 2 
Aug 2013 -> 2500 

QUERY NUMBER 3 
Aug 2013 -> 325 

所以2500(查询号码2)+ 325(查询号码3)= 2825,而不是2836(查询号码1) 和我不确定它为什么不给我2836

查看下面的查询,为什么QUERY 2 + QUERY 3 = QUERY 1? 这里只有一条线改变:

WHERE created_by_username = '[email protected]' 

//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 = '[email protected]' 
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 <> '[email protected]' 
GROUP BY DATE_FORMAT(created,'%b %Y') 
ORDER BY created ASC 

对不起,我不能找到建议在这些帖子格式SQL的文档。

+0

使用四个空格前缀SQL,或者选择SQL行并按下Ctrl-K,或者选择SQL行并从编辑器工具箱中选择代码 – Andomar 2014-09-02 16:07:16

+0

我的猜测是最后两个查询中存在“缺失”记录, created_by_username'是'Null'。 – hardmath 2014-09-02 16:09:48

+0

我正在努力查明问题。 'GROUP BY DATE_FORMAT(创建'%b%Y')'有问题吗?因为当我删除该行时,我返回的累计数字与最近6个月的每个累计数字不同(我限制了查询只显示我测试中的最后6个月)。 – Metzed 2014-09-02 16:33:55

回答

3

其中created_by_usernamenull的行将被where条款排除。

你可以找到这些行:

select * from view_all_quotes where created_by_username is null 
+0

我已更新查询并再次运行它们,仅显示过去6个月的结果(它们仍不合计)。然后,我为这6个月运行了以下内容,返回了0个结果。其他事情能发生吗? 'select * from view_all_quotes where created_by_username is null AND'2014-03-01'<= DATE_FORMAT(created,'%Y-%m-%d') AND'2014-09-01'> DATE_FORMAT(created,'' %Y-%m-%d')' – Metzed 2014-09-02 16:25:21

+0

也许它与'GROUP BY DATE_FORMAT(已创建,'%b%Y')'请参阅上面的评论... – Metzed 2014-09-02 16:34:21

+0

更新 - 我已经找出发生了什么事并在原文中显示了以下答案。感谢您的帮助@Andomar – Metzed 2014-09-02 17:30:33

0

当我写我认为错误是在我已经创造了查询的问题。然而,自写它以来,我发现查询没有任何问题,并且没有任何记录丢失。

但是,在查询2和查询3(正确)中出现少量用户名,因此查询1合并了这些用户名,表示查询1返回的值/结果小于查询2 +查询希望这是有道理的。对不起浪费任何人的时间。我在写这个问题时没有意识到答案只在我能看到的数据中。

再次感谢。

相关问题