如何统计问题7和9均回答Yes的有效问卷数量?
统计同时满足问题7和9均回答“Yes”的问卷数量
现有代码仅能单独统计问题7、9回答“Yes”的问卷数,无法实现同一问卷中两个问题均选“Yes”的统计,现有代码如下:
SELECT count(if(question.id = '7' and value = 'Yes',1,null)) as A, count(if(question.id = '9' and value = 'Yes',1,null)) as B FROM questions
数据结构说明
Survey表(存储问卷ID),questions表结构示例:
| 问题(Question.id) | 答案(value=Yes/No/Null) |
|---|---|
| 1 | No |
| 2 | Yes |
| 3 | |
| 4 | No |
| 5 | Yes |
| 6 | No |
| 7 | Yes |
| 8 | |
| 9 | Yes |
解决方案
核心思路是按问卷分组,判断每个问卷是否同时满足两个问题均为“Yes”的条件,以下提供两种可行方法:
方法一:分组条件聚合
SELECT COUNT(*) AS total FROM ( SELECT survey.id FROM questions JOIN survey ON questions.survey_id = survey.id -- 需确保questions表有与Survey关联的survey_id字段 WHERE question.id IN ('7', '9') AND value = 'Yes' GROUP BY survey.id HAVING COUNT(DISTINCT question.id) = 2 ) AS valid_surveys;
逻辑:筛选出问题7/9且回答为“Yes”的记录,按问卷分组后,仅保留同时包含两个问题的分组,最后统计符合条件的问卷总数。
方法二:表自连接匹配
SELECT COUNT(DISTINCT survey.id) AS total FROM questions q7 JOIN questions q9 ON q7.survey_id = q9.survey_id JOIN survey ON q7.survey_id = survey.id WHERE q7.question.id = '7' AND q7.value = 'Yes' AND q9.question.id = '9' AND q9.value = 'Yes';
逻辑:将questions表自连接,分别匹配问题7和9均为“Yes”的记录,关联到同一问卷后去重统计数量。
注意事项
- 需确认questions表存在与Survey表关联的字段(如
survey_id),否则无法按问卷维度统计。 - 两种方法都会自动排除仅回答了其中一个问题的问卷,仅统计两个问题均回答“Yes”的有效问卷。
内容的提问来源于stack exchange,提问作者Paul
相关产品推荐
相关产品推荐

