如何计算喜欢的邮件数量

时间:2017-08-04 07:50:10

标签: mysql

我的下表如下:(这是样本表)

message_unique_id   user_profile_id like_flag
91084                 1201             1
91084                 1201             2
91084                 1201             1
91084                 1202             1
91084                 1202             2
91084                 1202             1
91084                 1202             2

上表包含具有消息唯一ID的特定表的类似消息详细信息,并且不同配置文件喜欢这些消息 其中like_flag=1表示像msg,like_flag = 2表示不同于msg

现在我想计算喜欢的数量。

我该如何计算呢。

对于上表,like_count应为1。

如何将其作为1。

我想将like_count设为1,因为如果一个用户喜欢一个msg并且该用户再次不喜欢它,那么它的like_count就会变为0,如果该用户再次喜欢那个相同的msg那么那个msg的like_count会变成1那样

在上表中只有一个msg:91084,它被两个配置文件1201,1202所喜欢和不喜欢,但1201又像msg一样,所以总的like_count变为1

4 个答案:

答案 0 :(得分:2)

您可以使用GROUP BY计算每封邮件的内容,例如:

SELECT message_unique_id, SUM(IF(like_flag = 1, 1, -1)) AS likes
FROM messages
GROUP BY message_unique_id;

或者CASE

SELECT message_unique_id, 
    SUM(CASE WHEN like_flag = 1 THEN 1 WHEN like_flag = 2 THEN -1 ELSE 0) AS likes
FROM messages
GROUP BY message_unique_id;

如果您想计算喜欢的邮件总数,那么您只需使用COUNT,例如:

SELECT COUNT(DISTINCT message_unique_id)
FROM messages
WHERE like_flag = 1;

答案 1 :(得分:0)

SELECT 
SUM(IF(like_flag = 1,1,-1)) as liked
SUM(IF(like_flag = 2,1,-1)) as unlike
FROM  messages
GROUP BY message_unique_id

答案 2 :(得分:0)

尝试这样的事情:

SELECT message_unique_id,
       COUNT( NULLIF( like_flag, 2 ) ) AS liked,
       COUNT( NULLIF( like_flag, 1 ) ) AS unliked
FROM  table 
GROUP BY message_unique_id

答案 3 :(得分:0)

从tablename中选择COUNT(like_flag),其中Flag = 1;