ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

LeetCode:Database 23.2016年的投资

2021-05-15 15:29:17  阅读:188  来源: 互联网

标签:投保 20 Database TIV 2015 23.2016 2016 LeetCode 投保人


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

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

  • 1.他在 2015 年的投保额 (TIV_2015) 至少跟一个其他投保人在 2015 年的投保额相同
  • 2.他所在的城市必须与其他投保人都不同(也就是说维度和经度不能跟其他任何一个投保人完全相同)

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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有