SQL:每天的平均值

时间:2014-07-05 13:10:26

标签: sql average coalesce

我有一个名为'tweets'的数据库。数据库'推文'包括(其中包括)行'tweet_id','创建于'(dd / mm / yyyy hh / mm / ss),'分类'和'已处理文本'。在“已处理的文本”行中,有一些字符串,例如{TICKER | IBM}',我将其称为自动收报机字符串。

我的目标是每天获得每个自动收报机字符串的“分类”平均值。 “分类”行包括数值-1,0和1。 此时,我有一个有效的SQL查询,用于每天一个自动收报机字符串的'已分类'的平均值。请参阅下面的脚本。

    SELECT Date( `created_at` ) , AVG( `classified` ) AS Classified
    FROM `tweets` 
    WHERE `processed_text` LIKE '%{TICKER|IBM}%'
    GROUP BY Date( `created_at` )

此脚本存在两个问题:

  1. 它不包括像{TICKER | IBM}那样零'processed_text'的日子。但是我想在这种情况下吐出零值。
  2. 我有100多个不同的自动收录器字符串,因此希望有一个可以同时处理多个字符串的脚本。我也可以一个接一个地手动完成它们,但这会花费我很多时间。
  3. 当我有一个类似的问题来计算'tweet_id'的每个自动收报机字符串时,其他人建议使用以下内容:

    SELECT d.date, coalesce(IBM, 0) as IBM, coalesce(GOOG, 0) as GOOG,
    coalesce(BAC, 0) AS BAC
    FROM dates d LEFT JOIN
     (SELECT DATE(created_at) AS date,
             COUNT(DISTINCT CASE WHEN processed_text LIKE '%{TICKER|IBM}%' then tweet_id
                   END) as IBM,
             COUNT(DISTINCT CASE WHEN processed_text LIKE '%{TICKER|GOOG}%' then tweet_id
                   END) as GOOG,
             COUNT(DISTINCT CASE WHEN processed_text LIKE '%{TICKER|BAC}%' then tweet_id
                   END) as BAC
      FROM tweets
      GROUP BY date
     ) t
     ON d.date = t.date;
    

    这个脚本非常适合计算每个ticker-string的tweet_ids。正如我所说,我不打算找到每个自动收报机字符串的平均分类分数。我的问题是:有人可以告诉我如何调整这个脚本,以便我可以计算每天每个自动收报机字符串的平均classified分数吗?

1 个答案:

答案 0 :(得分:0)

SELECT d.date, t.ticker, COALESCE(COUNT(DISTINCT tweet_id), 0) AS tweets
FROM dates d
LEFT JOIN
    (SELECT DATE(created_at) AS date,
            SUBSTR(processed_text, 
                   LOCATE('{TICKER|', processed_text) + 8,
                   LOCATE('}', processed_text, LOCATE('{TICKER|', processed_text))
                    - LOCATE('{TICKER|', processed_text) - 8)) t
ON d.date = t.date
GROUP BY d.date, t.ticker

这会将每个自动收报机放在自己的行上,而不是列。如果要将它们移动到列,则必须转动结果。如何执行此操作取决于DBMS。有些具有用于创建数据透视表的内置功能。其他人(例如MySQL)没有,你必须编写棘手的代码才能做到这一点;如果您提前了解所有可能的值,那么它并不太难,但如果它们可以更改,则必须在存储过程中编写动态SQL。

有关如何在MySQL中执行此操作,请参阅MySQL pivot table