我有一个mysql查询来构建,这给了我一点麻烦。我已经完成了我需要的一系列查询,但我知道必须有更好的方法。
我有一个调查答案表,有5列可以回答5个问题。 问题总是从1(最低)到5(最高)。
我需要找到所有5个答案的平均值,并以100%的百分比显示。
起初,我完成了这个:
Select qone,qtwo,qthree,qfour,qfive FROM survey_answers WHERE survey_id='$survey_id'
然后我循环完成所有答案:
$counter++;
$survey_total = $survey_total+(($qone+$qtwo+$qthree+$qfour+$qfive)/25);
最后,循环浏览所有调查结果后:
$total_average = $survey_total/$counter;
所以这就是我解决我需要做的事情。
任何人都可以帮我改进这个查询,甚至可以改成一个吗?
是否可以执行以下操作:
Select AVG(SUM(qone+qtwo+qthree+qfour+qfive)/25)) FROM survey_answers WHERE survey_id='$survey_id'
以上查询不起作用,我知道sum计算该列名的所有行。 是否有MySQL语法来添加同一条目的多个列? 此外,如果有,我可以将该总和除以我选择的数字,然后在一个查询中平均这些结果??
谢谢。 杰森
答案 0 :(得分:1)
尝试这样的事情,这应该会给你在%
中寻找的结果SELECT
20 * q1 / devider AS Question1,
20 * q2 / devider AS Question2,
20 * q3 / devider AS Question3,
20 * q4 / devider AS Question4,
20 * q5 / devider AS Question5
FROM (
SELECT (
SELECT COUNT( survey_id )
FROM (
SELECT survey_id
FROM `survey_answers`
WHERE `survey_id` ='$survey_id'
)tt1
) AS devider, SUM(`qone') AS q1, SUM(`qtwo`) as q2, SUM(`qthree`) as q3, SUM(`qfour`) as q4, SUM(`qfive`) AS q5
FROM `survey_answers`
WHERE `survey_id` ='$survey_id'
GROUP BY `survey_id`
)tt2