我在通过SQL查询计算零值时遇到问题。虽然在网站上提出了类似的问题,但我似乎无法使用我的查询。
我有一个包含某些字符串的数据库,例如'{TICKER | IBM}',我将其称为自动收报机字符串。目标是计算每天的自动收报机字符串数量。
我的数据库表'推文'包括行'tweet_id','创建于'(dd / mm / yyyy hh / mm / ss)和'已处理文本'。股票代码字符串,例如“{TICKER | IBM}”,位于“已处理文本”行中。
因此,为了计数,我做了以下SQL查询。
SELECT COUNT( DISTINCT `tweet_id` ) , DATE( `created_at` )
FROM `tweets`
WHERE `processed_text` LIKE '%{TICKER|IBM}%'
GROUP BY DATE( `tweets`.`created_at` )
此查询返回每个日期的不同推文ID的数量,但忽略计数等于零的日期。我理解这可以归咎于我的SQL查询中没有使用'LEFT JOIN',但是我仍然无法为这个问题创建一个有效的SQL查询(由于我的SQL知识有限)。
更新感谢评论者:我将创建一个包含日期的表格(其中没有hh / mm / ss)。有人可以向我解释如果它被称为'日期',我应该如何链接到这个表?
答案 0 :(得分:1)
您需要将日期表与返回计数的子查询联系起来:
SELECT d.date, IFNULL(t.count, 0) AS tweet_count
FROM all_dates AS d
LEFT JOIN (
SELECT COUNT(DISTINCT tweet_id) AS count, DATE(created_at) AS date
FROM tweets
WHERE processed_text LIKE '%{TICKER|IBM}%'
GROUP BY date) AS t
ON d.date = t.date
此外,如果tweet_id
是唯一列,则您不需要COUNT(DISTINCT tweet_id)
,只需使用COUNT(*)
。
答案 1 :(得分:0)
我建议在几年前创建一个ALMANAC表来回答类似的问题。
Structuring Databases for Financial Statements
ALMANAC表在报表数据库中非常有用,即使它不是数据集市或数据仓库也是如此。
生成ALMANAC表的最佳方法是使用常规编程语言编写程序,或者编写SQL的过程扩展。如果您这样做,有一些属性,如“公司假期”(是/否)或“财政季度”(2014财年第2季度),根据您的报告需求,您可能会在添加时找到这些属性。一旦你有了ALMANAC,Bamar使用LEFT JOIN的回复应该对你有所帮助。