我有两张桌子:
一个是具有“userid”列的用户,另一个是具有“是”和“否”列的意见。 “是”和“否”列都包含逗号分隔值。
我想要的是计算“是”列中“用户ID”出现的次数以及它出现在“否”列中的次数。
我现在拥有的是这个
SELECT userid, COUNT(yes), COUNT(no)
FROM users LEFT JOIN opinion ON (FIND_IN_SET( userid, yes) > 0)
GROUP BY userid
以上工作原理是它计算每个用户在“是”列中出现的次数,但在“否”列上出错。回显“否”会产生与回显“是”相同的结果
“用户”的示例数据
1
2
3
“是”的样本数据
1,2
1,3
2,3
1
“no”的样本数据
1,2
1,2
1,3
期望的结果是上面的数据:
users yes no
1 3 3
2 2 2
3 2 1
提前感谢您提供任何帮助
答案 0 :(得分:1)
您的查询只需要一点点调整。添加一个条件,在另一个表上将userID
与列NO
连接起来。在计算值时,您还需要在聚合函数FIND_IN_SET()
中使用MAX()
。
SELECT a.userID,
SUM(FIND_IN_SET(a.userID, b.yes) > 0) TotalYes,
SUM(FIND_IN_SET(a.userID, b.no) > 0) TotalNo
FROM users a
LEFT JOIN opinion b
ON FIND_IN_SET(a.userID, b.yes) > 0 OR
FIND_IN_SET(a.userID, b.no) > 0
GROUP BY a.userID
ORDER BY a.userID