在Oracle中会用到
percentile_cont(比例) WITHIN GROUP( ORDER BY to_number(分数) )
的写法,但在MySQL中却没有percentile_cont函数用法,所以只能根据函数思想使用排序LIMIT改编算法(亲测,基本无误差)

Oracle

create function fn_get_grade(score float)
/**
** 五段分为法
** 大于84% 是A等级
** 小于等于84% 且 大于 63% 是B等级
** 小于等于63% 且 大于 37% 是C等级
** 小于等于37% 且 大于 16% 是D等级
** 小于等于16%             是E等级
**/
RETURN VARCHAR2 ISRESULT VARCHAR2(10);grade_a FLOAT;grade_b FLOAT;grade_c FLOAT;grade_d FLOAT;
beginSELECT percentile_cont(0.84) WITHIN GROUP( ORDER BY to_number(total_score) ) p  INTO grade_aFROM fb_unit_assessment_report r;SELECT percentile_cont(0.63) WITHIN GROUP( ORDER BY to_number(total_score) ) p  INTO grade_bFROM fb_unit_assessment_report r;SELECT percentile_cont(0.37) WITHIN GROUP( ORDER BY to_number(total_score) ) p  INTO grade_cFROM fb_unit_assessment_report r;SELECT percentile_cont(0.16) WITHIN GROUP( ORDER BY to_number(total_score) ) p  INTO grade_dFROM fb_unit_assessment_report r;IF score > grade_a THENRESULT := 'A';ELSIF score <= grade_a AND score > grade_b THENRESULT := 'B';ELSIF score <= grade_b AND score > grade_c THENRESULT := 'C';ELSIF score <= grade_c AND score > grade_d THENRESULT := 'D';ELSERESULT := 'E';END IF;return(Result);
end fn_get_grade;
/

MySQL

create function fn_get_grade(score float) returns VARCHAR(10)
/**
** 五段分为法
** 大于84% 是A等级
** 小于等于84% 且 大于 63% 是B等级
** 小于等于63% 且 大于 37% 是C等级
** 小于等于37% 且 大于 16% 是D等级
** 小于等于16%             是E等级
**/beginDECLARE RESULT VARCHAR(10);DECLARE a INT ;DECLARE b INT ;DECLARE c INT ;DECLARE d INT ;DECLARE grade_a FLOAT;DECLARE grade_b FLOAT;DECLARE grade_c FLOAT;DECLARE grade_d FLOAT;SELECT CAST(ROUND(COUNT(total_score)*(1-0.84)+1)AS signed) INTO a FROM fb_unit_assessment_report r ;SELECT total_score  INTO grade_a FROM fb_unit_assessment_report r ORDER BY total_score DESC LIMIT a,1;SELECT CAST(ROUND(COUNT(total_score)*(1-0.63)+1)AS signed) INTO b FROM fb_unit_assessment_report r ;SELECT total_score  INTO grade_b FROM fb_unit_assessment_report r ORDER BY total_score DESC LIMIT b,1;SELECT CAST(ROUND(COUNT(total_score)*(1-0.37)+1)AS signed) INTO c FROM fb_unit_assessment_report r ;SELECT total_score  INTO grade_c FROM fb_unit_assessment_report r ORDER BY total_score DESC LIMIT c,1;SELECT CAST(ROUND(COUNT(total_score)*(1-0.16)+1)AS signed) INTO d FROM fb_unit_assessment_report r ;SELECT total_score  INTO grade_d FROM fb_unit_assessment_report r ORDER BY total_score DESC LIMIT d,1;IF score > grade_a THENset RESULT = 'A';ELSEIF score <= grade_a AND score > grade_b THENset RESULT = 'B';ELSEIF score <= grade_b AND score > grade_c THENset RESULT = 'C';ELSEIF score <= grade_c AND score > grade_d THENset RESULT = 'D';ELSEset RESULT = 'E';END IF;return(RESULT);
end 

Oracle转MySQL存储函数percentile_cont(比例) WITHIN GROUP( ORDER BY to_number(分数) )用法相关推荐

  1. mysql5建函数报1064错误,MySQL存储函数创建错误ERROR 1064和1327

    我正在使用MySQL v5.1.36,我正在尝试使用此代码创建存储函数. DELIMITER // CREATE FUNCTION `modx`.getSTID (x VARCHAR(255)) RE ...

  2. oracle存储过程与函数的区别及作用,Oracle存储过程与存储函数-入门

    文章思维导图 一. 存储过程和存储函数的定义 定义:存储在数据库中,供所有用户程序调用的子程序叫做存储过程/存储函数.复杂点的解释:存储过程(Stored Procedure),就是一组用于完成特定数 ...

  3. ORACLE和MYSQL一些函数和实现效果的对比、替换

    工作中用到了oracle和mysql,所以如果sql有差异性就要提供两套.这篇文章来总结下oracle和mysql函数之间的区别.是否可替换. 一.Oracle的with x AS (子查询), y ...

  4. mysql存储函数声明float_mysql存储float

    Mysql中,int(10)和int(11)的区别 int(M) M指示最大显示宽度.最大有效显示宽度是255.显示宽度与存储大小或类型包含的值的范围无关 首先说一下mysql的数值类型,MySQL支 ...

  5. mysql创建有参数的函数,使用动态数量的参数创建MySQL存储函数

    我正在尝试创建一个MySQL函数IS_IN_ENUM('value','val1′,'val2′,'val3′),如果'value'在('val1′,'val2′,'val3')中,则返回true.我 ...

  6. mysql oracle round,Oracle和MySQL的函数对比和常用区别

    编号类别ORACLEMYSQL注释1数字函数round(1.23456,4)round(1.23456,4)一样: ORACLE:select round(1.23456,4) value from ...

  7. Oracle存储过程和存储函数创建

    select * from emp; -----------------存储过程------------------------ --定义create[or replace] procedure 存储 ...

  8. oracle对象之存储函数

    存储函数 create or replace function 函数名(Name in type, Name out type, ...) return 数据类型 is   结果变量 数据类型; be ...

  9. oracle和mysql存储汉字_mysql和oracle的一个汉字占几个字节

    以前一直使用oracle11g,一个汉字占3个字节,所以在操作mysql时也一直这样分配长度. 今天测试了下发现不对了 可以看到第一个的长度确实是15,但是第二个为什么是5? 在网上找到资料:char ...

最新文章

  1. 微软的PivotViewer控件编程续
  2. GSM —— 商业蜂窝通信系统
  3. 使用LVS+TUN搭建集群实现负载均衡
  4. Swoole练习 Web
  5. gRPC中Java和node进行异构通信-互为客户端和服务端
  6. AngularJs angular.bind、angular.bootstrap、angular.copy
  7. 手机浏览器无法获取COOKIE的原因
  8. 使用vs自带的性能诊断工具
  9. 使用 jQuery Mobile 与 HTML5 开发 Web App (七) —— jQuery Mobile 列表
  10. Oracle delete input与delete all input
  11. oracle数据库中分区表的效果是,分区表实际测试中发现并没有什么效果,帮忙看看问题出在哪里了???...
  12. Docker工作笔记002---CentOS7 Docker 安装
  13. 32位64位Eclipse和jdk对应关系
  14. Leetcode. 回文字符串的分割和最少分割数
  15. 大喇叭疫情防控广播解决方案
  16. 编译contrail-nodemgr
  17. 【计算机科学】【2020】基于创新机器学习方法的周期时间序列数据分析
  18. 2019年1月编程语言排行榜
  19. CentOS 添加微软雅黑字体
  20. FreeRTOS笔记篇:第七章 -- 资源管理(互斥锁、二进制信号量、死锁)

热门文章

  1. 微信小程序 vant-weapp 实现多选标签
  2. arcgis10动态地图的制作
  3. 四羧基锌酞菁(ZnC4Pc),Zn-taPc 酞菁类化合物,齐岳生物供应酞菁材料
  4. c语言输出形式tap间隔,C语言输出格式总结.doc
  5. http工作中常见的状态码
  6. 给女朋友明天一条贴心消息【公众号推送】
  7. 如何通过互联网赚钱?
  8. 来钱快的3种副业,虽然不起眼,不过很赚钱‍‍‍
  9. 基木鱼html标签,基木鱼 | QA常见问题|【其他类】
  10. java里用idea是什么意思_idea什么意思?啥意思?idea简介