Oracle转MySQL存储函数percentile_cont(比例) WITHIN GROUP( ORDER BY to_number(分数) )用法
在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(分数) )用法相关推荐
- mysql5建函数报1064错误,MySQL存储函数创建错误ERROR 1064和1327
我正在使用MySQL v5.1.36,我正在尝试使用此代码创建存储函数. DELIMITER // CREATE FUNCTION `modx`.getSTID (x VARCHAR(255)) RE ...
- oracle存储过程与函数的区别及作用,Oracle存储过程与存储函数-入门
文章思维导图 一. 存储过程和存储函数的定义 定义:存储在数据库中,供所有用户程序调用的子程序叫做存储过程/存储函数.复杂点的解释:存储过程(Stored Procedure),就是一组用于完成特定数 ...
- ORACLE和MYSQL一些函数和实现效果的对比、替换
工作中用到了oracle和mysql,所以如果sql有差异性就要提供两套.这篇文章来总结下oracle和mysql函数之间的区别.是否可替换. 一.Oracle的with x AS (子查询), y ...
- mysql存储函数声明float_mysql存储float
Mysql中,int(10)和int(11)的区别 int(M) M指示最大显示宽度.最大有效显示宽度是255.显示宽度与存储大小或类型包含的值的范围无关 首先说一下mysql的数值类型,MySQL支 ...
- mysql创建有参数的函数,使用动态数量的参数创建MySQL存储函数
我正在尝试创建一个MySQL函数IS_IN_ENUM('value','val1′,'val2′,'val3′),如果'value'在('val1′,'val2′,'val3')中,则返回true.我 ...
- mysql oracle round,Oracle和MySQL的函数对比和常用区别
编号类别ORACLEMYSQL注释1数字函数round(1.23456,4)round(1.23456,4)一样: ORACLE:select round(1.23456,4) value from ...
- Oracle存储过程和存储函数创建
select * from emp; -----------------存储过程------------------------ --定义create[or replace] procedure 存储 ...
- oracle对象之存储函数
存储函数 create or replace function 函数名(Name in type, Name out type, ...) return 数据类型 is 结果变量 数据类型; be ...
- oracle和mysql存储汉字_mysql和oracle的一个汉字占几个字节
以前一直使用oracle11g,一个汉字占3个字节,所以在操作mysql时也一直这样分配长度. 今天测试了下发现不对了 可以看到第一个的长度确实是15,但是第二个为什么是5? 在网上找到资料:char ...
最新文章
- 微软的PivotViewer控件编程续
- GSM —— 商业蜂窝通信系统
- 使用LVS+TUN搭建集群实现负载均衡
- Swoole练习 Web
- gRPC中Java和node进行异构通信-互为客户端和服务端
- AngularJs angular.bind、angular.bootstrap、angular.copy
- 手机浏览器无法获取COOKIE的原因
- 使用vs自带的性能诊断工具
- 使用 jQuery Mobile 与 HTML5 开发 Web App (七) —— jQuery Mobile 列表
- Oracle delete input与delete all input
- oracle数据库中分区表的效果是,分区表实际测试中发现并没有什么效果,帮忙看看问题出在哪里了???...
- Docker工作笔记002---CentOS7 Docker 安装
- 32位64位Eclipse和jdk对应关系
- Leetcode. 回文字符串的分割和最少分割数
- 大喇叭疫情防控广播解决方案
- 编译contrail-nodemgr
- 【计算机科学】【2020】基于创新机器学习方法的周期时间序列数据分析
- 2019年1月编程语言排行榜
- CentOS 添加微软雅黑字体
- FreeRTOS笔记篇:第七章 -- 资源管理(互斥锁、二进制信号量、死锁)