Coalesce()、greatest()、least()
oracle比较一列的数据大小时,我们一般使用max()/min()函数,比较一行的最大值或者最小值时,使用函数Coalesce()/greatest()/least()。
测试数据准备
create table stu_score( stu_id varchar2(4), math integer default 0, --姓名 english integer default 0, --性别 1 男 2 女 0 未知 chinese integer default 0 ); insert into stu_score(stu_id, math, english, chinese) values('0001', '11', '22', '33'); insert into stu_score(stu_id, math, english, chinese) values('0002', '44', '55', '66'); insert into stu_score(stu_id, math, english, chinese) values('0003', '77', '88', '99'); insert into stu_score(stu_id, math, english, chinese) values('0004', '100', '', ''); insert into stu_score(stu_id, math, english, chinese) values('0005', '', '100', ''); insert into stu_score(stu_id, math, english, chinese) values('0006', '', '', '100');
Coalesce()
Coalesce (value1, value2, value3, …)
返回改表达式列表的第一个非空的值,value列表必须是相同类型,也可以是一个表的同一行、不同列的值进行比较。
--coalesce测试①:返回2
select coalesce(2, 1, 3) Coalesce_test from dual;
--coalesce测试②:返回math
select coalesce('math', 'english', 'chinese') Coalesce_test from dual;
--coalesce测试③:数据类型不一致,报错
select coalesce('math', 'english', 'chinese',1) Coalesce_test from dual;
--coalesce测试④:返回结果如下图
select stu_id, coalesce(math, english, chinese) Coalesce_test from stu_score;
greatest()
greatest (value1, value2, value3, …)
返回value列表最大的值。value列表必须是相同类型,也可以是一个表的同一行、不同列的值进行比较。当value值列表中有一个为NULL,则返回NULL值。
--greatest测试①:返回3
select greatest(2, 1, 3) Coalesce_test from dual;
--greatest测试②:返回math
select greatest('math', 'english', 'chinese') Coalesce_test from dual;
--greatest测试③:自动处理数据类型,返回math
select greatest('math', 'english', 'chinese',1) Coalesce_test from dual;
--greatest测试④:返回结果如下图,如果value值列表中有一个为null,则返回null值
select stu_id, greatest(math, english, chinese) Coalesce_test from stu_score;
least()
least (value1, value2, value3, …)
返回value列表最小的值。value列表必须是相同类型,也可以是一个表的同一行、不同列的值进行比较。当value值列表中有一个为NULL,则返回NULL值。
--least测试①:返回1
select least(2, 1, 3) Coalesce_test from dual;
--least测试②:返回chinese
select least('math', 'english', 'chinese') Coalesce_test from dual;
--least测试③:自动处理数据类型,返回1
select least('math', 'english', 'chinese',1) Coalesce_test from dual;
--least测试④:返回结果如下图,如果value值列表中有一个为null,则返回null值
select stu_id, least(math, english, chinese) Coalesce_test from stu_score;