首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从测试前后计算改进% (MYSQL和PHP)

从测试前后计算改进% (MYSQL和PHP)
EN

Stack Overflow用户
提问于 2013-12-09 23:23:02
回答 1查看 1.3K关注 0票数 1

以下是SQLFiddle - http://sqlfiddle.com/#!2/b652d/1中此设置的链接

我想找到所有做过前测和后测的学生。然后,我想得到一个从预测试到后测试的总体百分比变化。

下面是我的查询,它没有返回测试后的任何结果:

代码语言:javascript
复制
 SELECT studid, TestDate, pre, post, ROUND( (
( post - pre ) / pre ) *100, 1 ) AS percentChange
FROM bodpod
WHERE ID2 =  'fall'
AND studid !=  ''
GROUP BY studid
HAVING COUNT( DISTINCT ID1 ) >1
AND TestDate LIKE  '%2013%'

以下是一个学生的样本数据:

我怎样才能重写这个查询,以获得预期的结果,对于所有在2013年秋季参加预测试和后测的学生来说,这是一个整体百分比的变化。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-10 00:28:48

编辑2:

在查看了小提琴中的数据,并猜测原始数据已经是百分比之后,我建议如下:

代码语言:javascript
复制
select round(sum(After)/count(After) - sum(B4)/count(B4), 2) '% Change' from
(select studid, sum(pre) 'B4' , sum(post) 'After' 
from bodpod
group by studid
having After > 0 and B4 > 0) data;

更正:

代码语言:javascript
复制
SELECT t1.studid, t1.TestDate, t1.pre, t2.post, ROUND( (
( t2.post - t1.pre ) / t1.pre ) *100, 1 ) AS percentChange
FROM bodpod t1
join bodpod t2 on t1.studid = t2.studid
WHERE t1.ID2 =  'fall'
AND t1.studid !=  ''
and t2.pre=0
GROUP BY studid
HAVING COUNT( DISTINCT t1.ID1 ) >1
AND TestDate LIKE  '%2013%'

当我运行它(在MySQL工作台中)时,我得到:

代码语言:javascript
复制
studid  TestDate    pre post    percentChange
6093191 8/12/2013 10:38 27.7    22.8    -17.7

累计百分比(假定不需要加权):

代码语言:javascript
复制
SELECT  ROUND( ( (sum(After) - sum(B4)) / sum(B4) ) *100, 1 ) AS percentChange from
(SELECT t1.studid, t1.TestDate, t1.pre as B4, t2.post as After
FROM bodpod t1
join bodpod t2 on t1.studid = t2.studid
WHERE t1.ID2 =  'fall'
AND t1.studid !=  ''
and t2.pre=0
GROUP BY studid
HAVING COUNT( DISTINCT t1.ID1 ) >1
AND TestDate LIKE  '%2013%') scores
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20482947

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档