1

次の表を検討してください

users                    tweets
--------------------     -----------------------------
user_id  neu pos neg     id _date       user_id  class
--------------------     -----------------------------
1                        1  2011-02-13  1        1
2                        2  2011-02-13  1        2
                         3  2011-02-15  2        1
                         4  2011-02-16  2        3
                         5  2011-02-16  2        3

データベース内の各ツイートは分析および分類されています。(ニュートラル)、(ポジティブ)、 (ネガティブ)のtweets.classいずれかです。ユーザーごとのすべての(ニュートラル、(ポジティブ) および(ネガティブ) ツイートをカウントするクエリが必要です。クエリの最終結果は、次のようになります。123neuposnegUPDATEusers

users
--------------------
user_id  neu pos neg
--------------------
1        1   1   0
2        1   0   3

私は今持っていますが、これはまったく機能しません。正しい方向に進んでいますか?

update users u left join (
  select count(t.id) as neu from tweets t where class = 1 
) on u.user_id = t.user_id
set u.neu = coalesce(neu,0)
4

1 に答える 1

1

これはうまくいくはずです:

UPDATE users a
       INNER JOIN (SELECT user_id,
                          SUM(IF(class = 1, 1, 0)) AS class_1,
                          SUM(IF(class = 2, 1, 0)) AS class_2,
                          SUM(IF(class = 3, 1, 0)) AS class_3
                   FROM tweets
                   GROUP BY user_id
                 ) b
             ON a.user_id = b.user_id
SET a.neu = b.class_1,
    a.pos = b.class_2,
    a.neg = b.class_3;
于 2012-07-26T12:11:20.950 に答える