0

我有 2 张桌子:

一种是带有“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

“否”的样本数据

1,2
1,2
1,3

期望的结果是上面的数据:

users     yes    no
1         3      3
2         2      2
3         2      1

提前感谢您的帮助

4

1 回答 1

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
于 2013-09-29T13:40:32.520 回答