精算屋-熊猫论坛

精算屋熊猫论坛

本论坛旨在为精算师及未来精算师提供交流平台.
在这里我们提倡平等,开放,互助,创新
或许你还不是精算师,来到这里,你已经成为了我们的一员.

人气 1929

[Prophet模型] 5分钟学会精算师常用Oracle语句 [复制链接]

zhizhizhi 2020-7-26 22:46:40
作为精算师,在保险公司需要处理千万量级+保单数据和财务数据。

  • 经验分析团队利用庞大的历史保单数据及理赔数据建议合适的最优估计假设(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里的数据
  1. Select * from TableA
复制代码


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


查询男性保单的总保费
  1. Select sum(AnnualPrem) from TableA where Sex=’M’
复制代码


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


3模糊查询
查询IDnum开头为‘A’的保单
  1. Select * from TableA where Product like‘A%’;
复制代码

查询定期寿险保单
  1. Select * from TableA where Product like '%Term%'
复制代码


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



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

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


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


创建一张新表TableC,将TableA导入,将其放在USERS的存储空间
  1. Create table TableC tablespace users as select * from TableA;
复制代码

2多表关联创建
创建一张新表TableC,将TableA导入,并导入TableB的收入信息和城市信息
  1. 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(插入的表是已经存在的表)
  1. Insert into TableC select * from TableA;
复制代码


4清空表
清空TableA
  1. Truncate table TableA;
复制代码



5删除表
删除TableA
  1. Drop table TableA;
复制代码


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

1添加列
给TableA添加列Age,格式为Number
  1. Alter table TableC add (Age number)
复制代码


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


2更新列
更新TableA的列AnnualPrem,对AnnualPrem乘以1.1
  1. Update table TableC set AnnualPrem= AnnualPrem*1.1
复制代码


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


3删除列
删除TableA列ID
  1. Alter table TableC drop column IDnum
复制代码


删除TableA列AnnualPrem和列ID
  1. Alter table TableC drop (AP,ID)
复制代码


4删除数据
删除TableA男性保单数据
  1. Delete from TableC where Sex=’M’;
复制代码

在TableA里删除ID在TableB的数据
  1. Delete from TableA where IDnum in (select IDnum from TableB)
复制代码


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


多条件查询

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


2Decode
Sex如果是M返“男“,F返回“女“
  1. Decode (Sex,'M','男','F','女')
复制代码


数据格式转换

1转为日期
将20190101转为日期类型
  1. To_date('20190101','YYYYMMDD')
复制代码


2转为数字
将20190101转为数字类型
  1. To_number(20190101)
复制代码



3截取字符串

截取20190101中的月份
  1. Substr(20190101,5,2)
复制代码










本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

Archiver|手机版|小黑屋|精算屋

GMT+8, 2024-4-26 13:48 , Processed in 0.111645 second(s), 22 queries .

Powered by Discuz! X3.4  © 2001-2017 Comsenz Inc.