我需要做的是:
在本课程的所有班级调查中,如果问题1的答案大于3,则获取百分比。
我有一个表格,里面有大量的课堂调查数据。问题是,例如gene01,可能有5个不同的学生对它进行了5次调查;所以我有4节课,但有50个调查与之相关。
所以目前,我运行两个查询来完成这个任务,但我希望它是一个单一的查询。下面是我想要合并的两个查询。
-- Query 1
SELECT COUNT(survey_ID) as total
FROM survey_Table
WHERE courseName LIKE 'GENE01'
OR courseName LIKE 'GENE02'
OR courseName LIKE 'GENE03'
OR courseName LIKE 'GENE04'
GROUP BY survey_ID WITH ROLLUP
;
-- Query 2
SELECT COUNT (survey_ID) as newTotal
FORM survey_Table
WHERE courseName LIKE 'GENE01' AND question1 > 3
OR courseName LIKE 'GENE02' AND question1 > 3
OR courseName LIKE 'GENE03' AND question1 > 3
OR courseName LIKE 'GENE04' AND question1 > 3
GROUP BY survey_ID WITH ROLLUP
;
然后我从桌上拿了一个计算器,做了一个新的总数*100。我不知道要完成这个简单的任务需要使用什么子查询(或者您需要做什么)。我想我遇到的问题是我不知道如何比较同一列的计数。
谢谢大家,很抱歉我是mysql的新手。
2条答案
按热度按时间iszxjhcz1#
条件聚合是一种可能的方法:
注意状况
s.question1 > 3
是mysql的速记。mysql计算该值并返回1表示true,返回0表示false,如果为null则返回null。这几乎等同于更符合可移植的ansi标准:
对空值的处理有区别。
更精确地重写
SUM(s.question1 > 3)
会是对于返回的每一行
SUM()
对骨料进行评估。1
总是计算为1
.可以省略
survey_ID
从选择列表中。通常当我们做一个GROUP BY foo
我们感兴趣的是哪个结果行与哪个结果行相关联foo
.问题是如何得到一个“百分比”。我们可以在一个表达式中除法
SELECT
列表。但我不认为with rollup
“会让你得到你想要的。举个例子:
在这个例子中,我选择省略
GROUP BY
条款。所以这将返回一个整体的总行,这将得到一个整体的百分比(如果我们使用GROUP BY
以及WITH ROLLUP
,将添加百分比。很可能这不是我们想要的结果。)wooyq4lh2#
您可以按调查id加入这两个查询