前言:
当前你们对“oracle相乘保留两位小数点”可能比较讲究,我们都想要知道一些“oracle相乘保留两位小数点”的相关文章。那么小编也在网络上网罗了一些对于“oracle相乘保留两位小数点””的相关文章,希望你们能喜欢,咱们快快来了解一下吧!标题:在oracle数据库中,对货拉拉笔试题目进行解析
今天给大家讲解一个货拉拉的面试题目,这是一个和case when 有关系的典型的例题,可以帮助我们理解遇到这一种大类的问题时如何去处理和比例计算有关的事情。
解析过程:
1. 首先,一般在遇到有多个表格出现的情况,我们可以先看看表格之间是否存在关联,是否需要将表格先联合起来,在这个题目里面,我们需要将用户表和订单表中的用户id进行关联
select * from trips a join users b
on a.client_id=b.user_id and b.banned='No'
2. 然后我们看到订单表中,订单状态总体上分为 完成(complete)和 取消(cancel)两类,而最终的计算结果也需要查询取消的比率,所以我们通过case when 语句,将完成的替换成0,取消的替换成1
select
request_at,
case
when status='completed' then 0
else 1
end s
from trips a join users b
on a.client_id=b.user_id and b.banned='No'
3. 转换完状态之后,我们接着按照日期进行分组和统计,行数为总数,总和数为取消数,然后对计算结果保留两位小数
select request_at,round(sum(s)/count(1),2) from
(select
request_at,
case
when status='completed' then 0
else 1
end s
from trips a join users b
on a.client_id=b.user_id and b.banned='No') a
group by request_at
order by request_at;
4. 我们这里要注意到一个细节,就是题目最终的取消率是顶左边格子的,说明它是一个字符串类型,而且最终的显示是 0.00,有进行格式上的转换操作,所以如果是oracle数据库,我们可以使用 to_char() 函数进行格式上的自定义
select request_at,to_char(round(sum(s)/count(1),2), '0.00') from
(select
request_at,
case
when status='completed' then 0
else 1
end s
from trips a join users b
on a.client_id=b.user_id and b.banned='No') a
group by request_at
order by request_at;
标签: #oracle相乘保留两位小数点 #oracle英文面试题 #oracle函数面试