我已经把三张桌子连在一起了。我正在查询关键字+统计数据。
我需要按日期范围获取数据,如果没有该特定日期范围的数据,我希望它返回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
发布于 2012-07-16 21:00:32
假设您正在使用左连接正确地连接表,请使用:
select keyword, ifnull(sum(stat),0) ... group by keyword如果是WHERE子句在应用分组之前过滤掉一些统计数据,那么您需要将日期条件移动到左连接条件中,即。
from KeywordGroup left join KeywordData on ... and date > '2012-07-10'但在没有看到实际查询的情况下,我无法提供进一步的帮助。:-)
发布于 2012-07-16 21:14:46
尝尝这个
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;发布于 2012-07-16 21:00:22
你有没有看过左外连接?以下是连接类型的一个很好的参考:
http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html
"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
https://stackoverflow.com/questions/11504746
复制相似问题