1

(これはかなり長い投稿ですが、問題は簡単に解決できると思います。SQLFiddleの準備ができています) 次の表を検討してください。

----------------------------------------------------------------------
tweet_id sp100_id nyse_date   user_id class_id retweets quality follow
----------------------------------------------------------------------
1        1        2011-03-12  1       1        0        2.50    5.00
2        1        2011-03-13  1       2        2        2.50    5.00
3        1        2011-03-13  1       2        1        2.50    5.00
4        1        2011-03-13  2       2        0        0.75    1.00
5        1        2011-03-13  2       3        3        0.75    1.00
6        2        2011-03-12  2       2        3        0.75    1.00
7        2        2011-03-12  2       2        0        0.75    1.00
8        2        2011-03-12  1       3        5        2.50    5.00
9        2        2011-03-13  2       2        0        0.75    1.00
----------------------------------------------------------------------

この表からの望ましい出力は、およびごとに加重されたポジティブ (クラス = 2) およびネガティブ (クラス = 3) ツイートの量sp100_idごとのリストです。_dateretweetsqualityfollow

--------------------------------------------------------------------------------
sp100_id  nyse_date  pos-rt pos-quality pos-follow neg-rt neg-quality neg-follow
--------------------------------------------------------------------------------
1         2011-03-11 0      0           0          0      0           0
1         2011-03-12 0      0           0          0      0           0
1         2011-03-13 3 (1)  5.75 (2)    11.00 (3)  3 (4)  0.75        1.00
2         2011-03-11 0      0           0          0      0           0
2         2011-03-12 3      1.50        10.00      5.00   2.50        2.50
2         2011-03-13 0      0.75        1.00       0      0           0
--------------------------------------------------------------------------------

On 2011-03-13, 3 positive tweets for sp100_id 1:

(1) 1 tweet retweeted 2 times, 1 tweets retweeted 1 time and 
    1 tweet retweeted 0 times = 1 x 2 + 1 x 1 + 1 x 0 = 3
(2) 2 tweets with quality 2.50 and 1 tweet with quality 0.75 =
    2 x 2.50 + 1 x 0.75 = 5.75
(3) 2 tweets with follow 5 and 1 tweet with follow 1 =
    2 x 5.00 + 1 x 1.00 = 11.00

On 2011-03-13, 1 negative tweets for sp100_id 1:

(4) 1 tweet retweeted 3 times = 1 x 3 = 3

etc...

必要な他のテーブルを使用したSQLFiddleのデモがあります (すべてゼロのレコードセットも含めたいため、daterange テーブルにリンクする必要があります)。クエリの出力もありますが、目的の出力と異なる理由がわかりません。

--------------------------------------------------------------------------------
sp100_id  nyse_date  pos-rt pos-quality pos-follow neg-rt neg-quality neg-follow
--------------------------------------------------------------------------------
1         2011-03-11 0      0           0          0      0           0
1         2011-03-12 3      2           2          5      3           5
1         2011-03-13 3      8           12         3      1           1
2         2011-03-11 0      0           0          0      0           0
2         2011-03-12 3      2           2          5      3           5
2         2011-03-13 3      8           12         3      1           1
--------------------------------------------------------------------------------

問題がどこにあるのかわかりません。あなたは?あなたの助けは大歓迎です:-)

4

2 に答える 2

2

期待値が返されない理由は、日付とともに条件にsp100.sp100_id = tweets.sp100_idも含める必要があるためです。LEFT JOIN

日付にのみ参加することにより、に関係なく、テーブル内の任意の日付値に参加しますsp100_id。これが、結果の合計が破棄された理由です。これは、それぞれについてsp100_id、他のすべてのsp100_idsの値がsに含まれていたためSUM()です。

また、(美学の観点から)クエリを少しクリーンアップしました。

SELECT     a.sp100_id,
           b._date AS nyse_date,
           SUM(IF(c.class=2, c.retweets, 0)) AS 'pos-rt',
           SUM(IF(c.class=2, c.quality,  0)) AS 'pos-quality',
           SUM(IF(c.class=2, c.follow,   0)) AS 'pos-follow',
           SUM(IF(c.class=3, c.retweets, 0)) AS 'neg-retweet',
           SUM(IF(c.class=3, c.quality,  0)) AS 'neg-quality',
           SUM(IF(c.class=3, c.follow,   0)) AS 'neg-follow'
FROM       sp100 a
CROSS JOIN daterange b
LEFT JOIN  tweets c ON a.sp100_id = c.sp100_id 
                   AND b._date = c .nyse_date
GROUP BY   a.sp100_id, 
           nyse_date

SQLFiddleデモ

于 2012-08-01T10:51:36.613 に答える
1

私が見ることができる唯一の問題は、decデータ型の使用です。フロートに切り替えたところ、すべて問題ないようです。

間違った値が欠落していますか?

手動で計算した場合、3月13日(最後の行)の値がいくつか欠落しています。

于 2012-08-01T09:06:11.200 に答える