Mysql 基于多个select语句查询用户百分比

Mysql 基于多个select语句查询用户百分比,mysql,Mysql,我希望能够选择所有回答“Crunchy”和“direct”的用户,并将其作为回答“Crunchy”的所有用户的百分比返回 最终的游戏是能够产生一个事实,例如“70%回答Crunchy的用户也回答了Strunchy” |id |question_id | user_id | answer | |-------------------------------------| |1 | 1 | 81 | Crunchy | |2 | 1 | 82

我希望能够选择所有回答“Crunchy”和“direct”的用户,并将其作为回答“Crunchy”的所有用户的百分比返回

最终的游戏是能够产生一个事实,例如“70%回答Crunchy的用户也回答了Strunchy”

|id |question_id | user_id | answer   |
|-------------------------------------|
|1  |   1        |  81     | Crunchy  |
|2  |   1        |  82     | Crunchy  |
|3  |   1        |  83     | Smooth   |
|4  |   2        |  81     | Straight |
|5  |   2        |  82     | Diagonal |
|6  |   2        |  83     | Diagonal |
伪代码如下所示:

((Select all unique users where answer === Crunchy && where answer === Straight)

/

(Select all unique users where answer === Crunchy)) 

* 100 = %
到目前为止,我有一个查询来选择所有回答“脆”和“直”的用户:

SELECT *
    FROM
    ((SELECT *      
        FROM answers
        WHERE (question_id = 1 AND answer = 'Crunchy')) A

    JOIN

    (SELECT *       
        FROM answers
        WHERE (question_id = 3 AND answer = 'Straight')) B

    ON A.user_id = B.user_id ) 
    GROUP BY A.user_id
这将选择所有选择了两个答案的用户,但我需要将其作为一个总和,以便我可以将其除以第二个查询,该查询与第一个查询相同,但没有联接,因此本质上是这样的

SELECT *      
        FROM answers
        WHERE (question_id = 1 AND answer = 'Crunchy'
然后把答案乘以100


如何完成此SQL查询的其余部分,或者是否有更简单的方法执行此操作?

您可以使用
左连接来关联它们

SELECT IF(COUNT(*) = 0, 0, COUNT(a2.user_id)/COUNT(*)*100) AS percentage
FROM answers AS a1
LEFT JOIN answers AS a2 ON a1.user_id = a2.user_id 
    AND a2.question_id = 2 AND a2.answer = 'Straight'
WHERE a1.question_id = 1 AND a1.answer = 'Crunchy'
当没有与
answer='stright'
匹配的行时,
LEFT JOIN
将为
a2
列返回
NULL
。而
COUNT(a2.user\u id)
只统计非空值,因此这将统计所有直接回答
的用户。同时,
COUNT(*)
对所有行进行计数,这就是所有的
Crunchy
答案


如果没有精确的答案,
IF()
可以防止被0除法。

这正是我需要的。谢谢你,巴尔马。比我原来的要简洁得多。