mysql中利用ceil函数对成绩进行分段统计

栗子需求

目前我有一张成绩表,以如下简单的形式存储着某一科成绩,如今我想统计一下成绩在0~20、20~40、40~60、60~80、80~100各个阶段下的学生的总个数,可通过该文最后的sql语句插入测试数据。

idscorename
14姓名1
26姓名2
312姓名3
2096姓名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');
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值