簡體   English   中英

SQL:每天的平均值

[英]SQL: Average value per day

我有一個名為“ tweets”的數據庫。 數據庫“ 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多個不同的代碼字符串,因此希望有一個可以同時處理多個字符串的腳本。 我也可以手動地一對一地進行操作,但這會花費我很多時間。

當我有一個類似的問題要計算每個報價字符串的'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;

該腳本非常適合計算每個報價字符串的tweet_ids。 但是,正如我所說的,我並不是要查找每個股票行情的平均分類分數。 因此,我的問題是:有人可以告訴我如何調整此腳本,以便我可以計算每天每個報價行的平均classified分數嗎?

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數據透視表

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM