深圳哪里有网站建设,企业网站seo优化交流,合浦建设局网站,资源下载类型 wordpress力扣mysql题
题目:585. 2016年的投资
Insurance 表#xff1a;
Column NameTypepidinttiv_2015floattiv_2016floatlatfloatlonfloat
pid 是这张表的主键(具有唯一值的列)。 表中的每一行都包含一条保险信息#xff0c;其中#xff1a; pid 是投保人的投保编号。 tiv_201…力扣mysql题
题目:585. 2016年的投资
Insurance 表
Column NameTypepidinttiv_2015floattiv_2016floatlatfloatlonfloat
pid 是这张表的主键(具有唯一值的列)。 表中的每一行都包含一条保险信息其中 pid 是投保人的投保编号。 tiv_2015 是该投保人在 2015 年的总投保金额tiv_2016 是该投保人在 2016 年的总投保金额。 lat 是投保人所在城市的纬度。题目数据确保 lat 不为空。 lon 是投保人所在城市的经度。题目数据确保 lon 不为空。
题目:编写解决方案报告 2016 年 (tiv_2016) 所有满足下述条件的投保人的投保金额之和
他在 2015 年的投保额 (tiv_2015) 至少跟一个其他投保人在 2015 年的投保额相同。 他所在的城市必须与其他投保人都不同也就是说 (lat, lon) 不能跟其他任何一个投保人完全相同。 tiv_2016 四舍五入的 两位小数 。
查询结果格式如下例所示。
示例 1
输入 Insurance 表
pidtiv_2015tiv_2016latlon11051010220202020310302020410404040
输出
tiv_201645.00
解释 表中的第一条记录和最后一条记录都满足两个条件。 tiv_2015 值为 10 与第三条和第四条记录相同且其位置是唯一的。
第二条记录不符合任何一个条件。其 tiv_2015 与其他投保人不同并且位置与第三条记录相同这也导致了第三条记录不符合题目要求。 因此结果是第一条记录和最后一条记录的 tiv_2016 之和即 45 。
解题分析: 1.主要需要的字段: tiv_2016:用于汇总数据 tiv_2015:有相同数据的条件 lat lon :用于区别投保人位置,且是唯一数据 2.由上可得:
SELECT tiv_2016,
COUNT(1) OVER(PARTITION BY tiv_2015 ) cnt_tiv_2015,
COUNT(1) OVER(PARTITION BY lat,lon ) cnt_lat
FROM Insurance输出结果:
tiv_2016cnt_tiv_2015cnt_lat531303220124031
查询出我们需要的结果:cnt_tiv_2015 相同的不唯一的,cnt_lat唯一的 3.再根据条件最后查询:
SELECT round(sum(tiv_2016),2) tiv_2016
FROM
(
SELECT tiv_2016,
COUNT(1) OVER(PARTITION BY tiv_2015 ) cnt_tiv_2015,
COUNT(1) OVER(PARTITION BY lat,lon ) cnt_lat
FROM Insurance
) t
WHERE cnt_tiv_2015 1 AND cnt_lat 1;输入结果:
tiv_201645
最后所涉及到的函数及要点 1.round(x [,y]):返回离 x 最近的整数可选参数 y 表示要四舍五入的小数位数如果省略则返回整数 SELECT ROUND(1.23456) --1 SELECT ROUND(345.156, 2) – 345.16 2.COUNT(1) OVER(PARTITION BY tiv_2015) cnt_tiv_2015:分析tiv_2015这个字段的数据在表中出现相同的次数 3.COUNT(1) OVER(PARTITION BY lat,lon ) cnt_lat:分析lat,lon这两个字段在表中出现相同的次数 4.sum():返回指定字段的总和 计算 OrderDetails 表中字段 Quantity 的总和
SELECT SUM(Quantity) AS TotalItemsOrdered FROM OrderDetails;详解2和3:
SELECT *,
COUNT(1) OVER(PARTITION BY tiv_2015 ) cnt_tiv_2015,
COUNT(1) OVER(PARTITION BY lat,lon ) cnt_lat
FROM Insurance 结果:
pidtiv_2015tiv_2016latloncnt_tiv_2015cnt_lat1105101031310302020322202020201241040404031
pid1时,tiv_201510,tiv_2015字段在表中出现了 3次10的情况,cnt_tiv_20153; pid2时,tiv_201510,tiv_2015字段在表中出现了 3次10的情况;cnt_tiv_20153 pid3时,tiv_201520,tiv_2015字段在表中出现了 1次20的情况;cnt_tiv_20151 pid4时,tiv_201510,tiv_2015字段在表中出现了 3次10的情况;cnt_tiv_20153 同理可得: pid1时,lat10,lon10 表中出现了 1次的情况,cnt_lat1; pid2时,lat20,lon20 表中出现了 2次的情况,cnt_lat2; pid3时,lat20,lon20 表中出现了 2次的情况,cnt_lat2; pid4时,lat40,lon40 表中出现了 1次的情况,cnt_lat1;