Mysql 基于多个select语句查询用户百分比
我希望能够选择所有回答“Crunchy”和“direct”的用户,并将其作为回答“Crunchy”的所有用户的百分比返回 最终的游戏是能够产生一个事实,例如“70%回答Crunchy的用户也回答了Strunchy”Mysql 基于多个select语句查询用户百分比,mysql,Mysql,我希望能够选择所有回答“Crunchy”和“direct”的用户,并将其作为回答“Crunchy”的所有用户的百分比返回 最终的游戏是能够产生一个事实,例如“70%回答Crunchy的用户也回答了Strunchy” |id |question_id | user_id | answer | |-------------------------------------| |1 | 1 | 81 | Crunchy | |2 | 1 | 82
|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除法。这正是我需要的。谢谢你,巴尔马。比我原来的要简洁得多。