首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果不匹配,MYSQL SELECT SUM() BY DATE返回0

如果不匹配,MYSQL SELECT SUM() BY DATE返回0
EN

Stack Overflow用户
提问于 2012-07-16 20:54:08
回答 3查看 855关注 0票数 3

我已经把三张桌子连在一起了。我正在查询关键字+统计数据。

我需要按日期范围获取数据,如果没有该特定日期范围的数据,我希望它返回0统计数据

假设我的查询是:

SELECT关键字,SUM(stat) FROM keyword date >='2012-07-10‘GROUP BY关键字;

它会返回

我的关键字1|3

my keyword 2|6

示例表内容:

| id |关键词:、、| stat |日期:、、|stat|

1个月|我的关键词1|2个月| 2012-07-11 |1

|2小时|我的关键词1|1小时| 2012-07-12 |1

3个月|我的关键词2|6个月| 2012-07-11 |1

4小时|我的关键词3|10小时| 2012-07-09 |1

但是有一些关键字没有该日期范围的统计数据

但我仍然希望得到那些显示0作为统计数据的关键字。

如下所示:

我的关键字1|3

my keyword 2|6

my keyword 3|0

问题是where子句阻止了未找到的值,是否有解决方法。

正如我所说的,我有三个带有关系的表,我使用LEFT JOIN查询数据,为简化起见,我在示例查询中省略了这一部分。

表:活动

id

名字

表: KeywordGroup

id

名字

营销活动

表: KeywordData

id

关键字

状态

日期

keywordGroup

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-16 21:00:32

假设您正在使用左连接正确地连接表,请使用:

代码语言:javascript
复制
select keyword, ifnull(sum(stat),0) ... group by keyword

如果是WHERE子句在应用分组之前过滤掉一些统计数据,那么您需要将日期条件移动到左连接条件中,即。

代码语言:javascript
复制
from KeywordGroup left join KeywordData on ... and date > '2012-07-10'

但在没有看到实际查询的情况下,我无法提供进一步的帮助。:-)

票数 2
EN

Stack Overflow用户

发布于 2012-07-16 21:14:46

尝尝这个

代码语言:javascript
复制
select 
    t1.keyword,
    sum(t2.stat) as stat
from
(   
    select distinct keyword from keywords   
) as t1 left join
(
    SELECT keyword,SUM(stat) FROM keywords WHERE date >='2012-07-10' GROUP BY keyword
) as t2
on t1.keyword=t2.keyword;
票数 1
EN

Stack Overflow用户

发布于 2012-07-16 21:00:22

你有没有看过左外连接?以下是连接类型的一个很好的参考:

http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html

代码语言:javascript
复制
"To produce the set of records only in Table A, but not in Table B, 
we perform a left outer join, then exclude the records we don't want 
from the right side via a where clause."

ns

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11504746

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档