SQL:聚合函数在使用WHERE过滤器时返回0

时间:2013-03-11 14:17:14

标签: mysql sql mysql-workbench

我有一个包含10列的表格,其中列出了营销活动的结果,包括人名,日期,居住区域,请求和回复。

请求列始终是一个数字,表示我们发送给特定人员的调查请求数。

响应列是一个从0到X的数字,表示一个人已回复的调查数。

现在,当我查看实际表格时,可能会有大约10%的响应率。响应列中有许多非零条目。

但是,当我写这样的聚合函数时:

SELECT person, date, SUM(requests), SUM(response)
FROM analytics.SurveyResults0304
WHERE group_type = 'Youth'
GROUP BY person, date; 

我得到了一个正确的SUM(请求)数,但是我得到一个很大的“0”用于SUM(响应)? 所有3种类型都是一样的。它为SUM(响应)返回0

更新:当我不包含group_type过滤器时,它工作正常,但为什么我不能将它与WHERE过滤器一起使用?

感谢!!!

EDIT2:样本表

  Person    Date       Group_Type   Requests Response  Neighborhood FirstName  
  --------  --------   -----------  -------- --------  ------------ ---------
  Nixon     3/3/2013    Youth          3        3  Chinatown    Richard
  Clinton   3/3/2013    Youth          4        0  Gunhill      Bill
  Mao       3/3/2013    Youth          5        0  Berryville   Chairman
  Nixon     3/4/2013    Youth         17        2  Townsford    Richard
  Gates     3/3/2013    Elderly       41        5  Chinatown    Bill
  Gates     3/4/2013    Elderly        0        0  Chinatown    Bill
  Gates     3/5/2013    Elderly        0        0  Chinatown    Bill
  Gates     3/6/2013    Elderly        0        0  Chinatown    Bill

例如 当我这样做时:

SELECT  SUM(requests), SUM(response)
FROM analytics.SurveyResults0304
WHERE group_type = 'Youth';

请求返回70,全面响应返回0。

1 个答案:

答案 0 :(得分:1)

您的代码似乎正常运行。请参阅根据数据样本构建的SQL Fiddle

您的Group_Type列中可能有额外空格和/或标签吗?

PERSON  DATE                 SUM(REQUESTS)  SUM(RESPONSE)
--------------------------------------------------------
Clinton March, 03 2013 00:00:00+0000    4   0
Mao     March, 03 2013 00:00:00+0000    5   0
Nixon   March, 03 2013 00:00:00+0000    3   3
Nixon   March, 04 2013 00:00:00+0000    17  2