考虑下表
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
可以是 1
(中性)、2
(正面)或 3
(负面)。我需要一个查询来计算每个用户的所有 neu
(中性、pos
(正面)和 neg
(负面)推文。最终结果查询将是 UPDATE
d users
-table,如下所示:
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)
最佳答案
这应该有效:
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;
关于mysql - 计算数据库中的中立、正面和中立推文的数量并相应地更新表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11668764/