我有一张学生体能评估结果表。我需要找到参加过预测试和后测试的学生。为了获得学分,学生需要将测试前和测试后的身体脂肪结果控制在2%以内。到目前为止,这是我的有效查询,但没有考虑身体脂肪前后的2%差异。如何添加查询的那一部分?
这是我的查询:
SELECT studid, percentFat, ID1, ID2, STR_TO_DATE(TestDate, '%m/%d/%Y') as testd, bodpoints FROM bodpod, points WHERE ID2 = 'summer2' AND studid != '' GROUP BY studid HAVING COUNT( DISTINCT ID1 ) =2 AND YEAR( testd ) = '2013'
这是我正在使用的数据:
-表
bodpod
的表结构CREATE TABLE `bodpod` (
`studid` varchar(50) default NULL,
`TestDate` varchar(50) default NULL,
`ID1` varchar(50) default NULL,
`ID2` varchar(50) default NULL,
`percentFat` varchar(50) default NULL,
KEY `studid` (`studid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-转储表
bodpod
的数据INSERT INTO `bodpod` VALUES('123456', '7/29/2013 1:28:24 PM', 'pre', 'summer2', '22.3');
INSERT INTO `bodpod` VALUES('123456', '7/29/2013 1:22:23 PM', 'post', 'summer2', '15');
提前致谢!
最佳答案
如果您对数据库进行了重组以使其具有用于前后的列,则可以使用:SELECT * ... WHERE (pre < 1.02*post) AND (post < 1.02*pre) ...
MySQL将阻止您选择在GROUP BY
中使用计算列。