mysql - 在单个查询中使用多个 find_in_set

标签 mysql

我有 2 张 table :

一个是具有“userid”列的用户,另一个是具有"is"和“否”列的意见。 "is"和“否”列都包含逗号分隔值。

我想要的是计算“userid”出现在“yes”列中的次数以及它出现在“no”列中的次数。

我现在拥有的是这个

SELECT userid, COUNT(yes), COUNT(no)
FROM users LEFT JOIN opinion ON (FIND_IN_SET( userid, yes) > 0)
GROUP BY userid

上面的方法有效,因为它计算每个用户出现在"is"列中但错误地出现在“否”列中的次数。回显“否”结果与回显"is"结果相同

“用户”的示例数据

1
2
3

"is"的示例数据

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

预先感谢您的帮助

最佳答案

您的查询只需稍加调整。还添加一个条件,将 userID 与另一个表上的列 NO 连接起来。在计算值时,您还需要在聚合函数 MAX() 中使用 FIND_IN_SET()

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

关于mysql - 在单个查询中使用多个 find_in_set,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19078484/

相关文章:

mysql - SQL Join 仅返回一条记录

php - 响应式设计 - Android 不缩放

php - 使用 PHP 将 MySQL 和 Postgres 数据库中的数据放入单个 HTML 表中

php - 将选定的时间戳(带工作日)更改为 Fr、Mo 等

mysql - 如何在MySQL中插入新行,其中主键列是唯一且随机数

mysql - 使用Go将变量插入MySQL

Java 到 DB 连接异常

php - 这个系统有什么更好的 solr 查询?

MySQL时间戳自动更新

mysql - 连接两个表不起作用