目前我有一张成绩表,以如下简单的形式存储着某一科成绩,如今我想统计一下成绩在0~20、20~40、40~60、60~80、80~100各个阶段下的学生的总个数,可通过该文最后的sql语句插入测试数据。
id | score | name |
---|---|---|
1 | 4 | 姓名1 |
2 | 6 | 姓名2 |
3 | 12 | 姓名3 |
… | … | … |
20 | 96 | 姓名20 |
此时我们需要用到ceil函数来实现该需求,在写sql语句前必须要将百度百科中的ceil函数扒过来在这里展示一下:
函数名 : ceil
用 法: double ceil(double x);
功 能: 返回大于或者等于指定表达式的最小整数
说明:float ceil ( float value )返回不小于 value 的下一个整数,value 如果有小数部分则进一位。ceil() 返回的类型仍然是 float,因为 float 值的范围通常比 integer 要大。—- [百度百科]
此时我们在mysql中构造如下sql语句,其中mathscore是该成绩表的名称
select count(*),(ceil(score/20)-1)*20 as min,ceil(score/20)*20 as max from mathscore group by ceil(score/20)
DROP TABLE IF EXISTS `mathscore`;
CREATE TABLE `mathscore` ( `id` int(11) NOT NULL AUTO_INCREMENT, `score` double(10,0) NOT NULL, `name` varchar(20) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of mathscore
-- ----------------------------
INSERT INTO `mathscore` VALUES ('1', '4', '姓名1');
INSERT INTO `mathscore` VALUES ('2', '6', '姓名2');
INSERT INTO `mathscore` VALUES ('3', '12', '姓名3');
INSERT INTO `mathscore` VALUES ('4', '20', '姓名4');
INSERT INTO `mathscore` VALUES ('5', '22', '姓名5');
INSERT INTO `mathscore` VALUES ('6', '28', '姓名6');
INSERT INTO `mathscore` VALUES ('7', '34', '姓名7');
INSERT INTO `mathscore` VALUES ('8', '38', '姓名8');
INSERT INTO `mathscore` VALUES ('9', '42', '姓名9');
INSERT INTO `mathscore` VALUES ('10', '50', '姓名10');
INSERT INTO `mathscore` VALUES ('11', '56', '姓名11');
INSERT INTO `mathscore` VALUES ('12', '58', '姓名12');
INSERT INTO `mathscore` VALUES ('13', '65', '姓名13');
INSERT INTO `mathscore` VALUES ('14', '65', '姓名14');
INSERT INTO `mathscore` VALUES ('15', '66', '姓名15');
INSERT INTO `mathscore` VALUES ('16', '74', '姓名16');
INSERT INTO `mathscore` VALUES ('17', '79', '姓名17');
INSERT INTO `mathscore` VALUES ('18', '83', '姓名18');
INSERT INTO `mathscore` VALUES ('19', '89', '姓名19');
INSERT INTO `mathscore` VALUES ('20', '96', '姓名20');