我的下表如下:(这是样本表)
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
答案 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;