其他分享
首页 > 其他分享> > LeetCode:Database 23.2016年的投资

LeetCode:Database 23.2016年的投资

作者:互联网

要求:写一个查询语句,将 2016 年 (TIV_2016) 所有成功投资的金额加起来,保留 2 位小数。

对于一个投保人,他在 2016 年成功投资的条件是:

insurance表结构:

| Column Name | Type          |
|-------------|---------------|
| PID         | INTEGER(11)   |
| TIV_2015    | NUMERIC(15,2) |
| TIV_2016    | NUMERIC(15,2) |
| LAT         | NUMERIC(5,2)  |
| LON         | NUMERIC(5,2)  |
PID 字段是投保人的投保编号, TIV_2015 是该投保人在2015年的总投保金额, TIV_2016 是该投保人在2016年的投保金额, LAT 是投保人所在城市的维度, LON 是投保人所在城市的经度。

insurance表:

| PID | TIV_2015 | TIV_2016 | LAT | LON |
|-----|----------|----------|-----|-----|
| 1   | 10       | 5        | 10  | 10  |
| 2   | 20       | 20       | 20  | 20  |
| 3   | 10       | 30       | 20  | 20  |
| 4   | 10       | 40       | 40  | 40  |

Result Table:

| TIV_2016 |
|----------|
| 45.00    |

分析:
1.想要求取2016年投资成功的投保人的总金额,需要先筛选出在2015年投保金额相同且投保人数大于1的投保人信息,使用窗口聚合函数count() over()通过投保金额分组
2.再次筛选出城市不与其他人相同的投保人信息,使用窗口聚合函数count() over()通过维度、经度分组
3.通过以上两个筛选条件筛选出最终符合条件的投保人,将他们在2016年的投保总金额相加保留2位小数既是最终结果

SQL语句:

SELECT ROUND(SUM(tiv_2016),2) AS TIV_2016
FROM(
SELECT pid,tiv_2016,
COUNT(tiv_2015) over(PARTITION BY tiv_2015) AS c1,
COUNT(tiv_2015) over(PARTITION BY lat,lon) AS c2
FROM
insurance)a
WHERE c1>1 AND c2=1;

标签:投保,20,Database,TIV,2015,23.2016,2016,LeetCode,投保人
来源: https://blog.csdn.net/qq_43713049/article/details/116851528