zhizhizhi 发表于 2020-7-26 22:46:40

5分钟学会精算师常用Oracle语句

作为精算师,在保险公司需要处理千万量级+保单数据和财务数据。

[*]经验分析团队利用庞大的历史保单数据及理赔数据建议合适的最优估计假设(Best Estimate Assumption);
[*]评估团队利用有效/新业务保单和财务数据报送高质量的报告;
[*]产品团队对产品的回溯和分析离不开数据的支持;
[*]再保团队和再保公司处理再保账单也需要保单数据和理赔数据。
因此数据库软件算是除了Excel和精算模型软件之外必备的第三大软件。
目前,国内保险公司常用的数据库软件主要有Access,SQL server,FoxPro和Oracle。一般小公司喜欢使用Access和FoxPro,这两个软件适用于小型程序,处理的数据相对较少,像FoxPro支持2G字节的数据,但是价格便宜,操作简单,对小公司来说是不错的选择,但是当公司业务庞大后,数据表不得不分为多个表,降低了程序的效率,也不利于保存。
因此大公司青睐SQL server和Oracle。
SQL server和Oracle是企业级数据库,支持海量数据存储和应用, 数据安全性较高,但是收费较贵。许多数据处理软件都有Oracle的接口,像Tableau,使得后续的数据可视化、数据处理更加方便,因此像友邦人寿、太平洋人寿等大公司选择Oracle作为数据库。
今天简单介绍一下Oracle常用语句,都是一些简单但是使用频率高的语句,本人接触Oracle时间不长,还请数据库高手手下留情,如果有高效的语句,也欢迎留言或者分享在论坛,一起交流。
以TableA和TableB作为示例
TableA:保单信息1



TableB:被保险人信息




​查询语句


1简单查询简单查询TableA里的数据Select * from TableA

2条件查询查询承保年龄在30岁以内的保单Select * from TableA where IssueAge<=30

查询男性保单的总保费Select sum(AnnualPrem) from TableA where Sex=’M’

查询产品A和产品C被保险人的平均承保年龄Select Sum(IssueAge)/Count from TableA where Product='TermLife A' or Product='TernLife C';

3模糊查询查询IDnum开头为‘A’的保单Select * from TableA where Product like‘A%’;
查询定期寿险保单Select * from TableA where Product like '%Term%'

4聚合查询查询男性和女性的总保费Select sex,sum(AnnualPrem) from TableA group by sex;


创建、插入、删除及清空表

1导入创建创建一张新表TableC,将TableA导入
Create table TableC as select * from TableA;

创建一张新表TableC,将TableA中男性导入
Create table TableC as select * from TableA where Sex=’M’;

创建一张新表TableC,将TableA导入,将其放在USERS的存储空间
Create table TableC tablespace users as select * from TableA;
2多表关联创建创建一张新表TableC,将TableA导入,并导入TableB的收入信息和城市信息
Create table TableC as select a.*,b.Salary,b.City from TableA a left join TableB b on trim(a.IDnum)=trim(b.IDnum)

3插入表将TableA插入到TableC(插入的表是已经存在的表)
Insert into TableC select * from TableA;

4清空表清空TableATruncate table TableA;


5删除表删除TableADrop table TableA;

添加、更改,删除列或数据

1添加列 给TableA添加列Age,格式为NumberAlter table TableC add (Age number)

给TableA添加列SmokerStatus,格式为varchar2(2),括号里20是设置的最大字节数
Alter table TableC add (SmokerStatus varchar2(2));

2更新列 更新TableA的列AnnualPrem,对AnnualPrem乘以1.1
Update table TableC set AnnualPrem= AnnualPrem*1.1

更新TableA的列AnnualPrem,对吸烟者AnnualPrem乘以1.1
Update table TableC set AnnualPrem= AnnualPrem*1.1 where SmokerStatus ='Y'

3删除列 删除TableA列ID
Alter table TableC drop column IDnum

删除TableA列AnnualPrem和列ID
Alter table TableC drop (AP,ID)

4删除数据 删除TableA男性保单数据
Delete from TableC where Sex=’M’;
在TableA里删除ID在TableB的数据
Delete from TableA where IDnum in (select IDnum from TableB)

5提交数据 在insert/delete/update操作后,需要提交数据,数据库才能真正修改数据Commit;

多条件查询

1Case when 在TableA查询保单号和性别,如果是M则显示“男”,F显示“女”,都不是显示“其他”
Select Pol,(Case Sexwhen M then '男'when F then '女'else '空'END) 性别 from TableA

2Decode Sex如果是M返“男“,F返回“女“
Decode (Sex,'M','男','F','女')

数据格式转换
1转为日期 将20190101转为日期类型
To_date('20190101','YYYYMMDD')

2转为数字 将20190101转为数字类型
To_number(20190101)


3截取字符串
截取20190101中的月份
Substr(20190101,5,2)









页: [1]
查看完整版本: 5分钟学会精算师常用Oracle语句