mysql - 计算数据库中的中立、正面和中立推文的数量并相应地更新表

标签 mysql

考虑下表

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(负面)推文。最终结果查询将是 UPDATEd 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/

相关文章:

MySQL 聚合?

java - hibernate中这两种查询方式有什么区别?

mysql - 如何优化这个 Levenshtein 距离计算

mysql - 为什么我会收到此 mysqlclient.lib 错误?

php - 如何将api结果添加到mysql

php - 检索与 PHP mysqli_real_connect() 建立连接需要多长时间

php - 使用 mysqli 而不是 mysql 时运行一段时间。

c# - 存储过程 DateTime 'Parameter not found in the collection' 错误

java - 如何下载从数据库中获取结果集的excel表

php - 如何在字符串 mysqli PHP 中绑定(bind)参数