赞
踩
Insurance 表:
±------------±------+
| Column Name | Type |
±------------±------+
| pid | int |
| tiv_2015 | float |
| tiv_2016 | float |
| lat | float |
| lon | float |
±------------±------+
pid 是这张表的主键(具有唯一值的列)。
表中的每一行都包含一条保险信息,其中:
pid 是投保人的投保编号。
tiv_2015 是该投保人在 2015 年的总投保金额,tiv_2016 是该投保人在 2016 年的总投保金额。
lat 是投保人所在城市的纬度。题目数据确保 lat 不为空。
lon 是投保人所在城市的经度。题目数据确保 lon 不为空。
编写解决方案报告 2016 年 (tiv_2016) 所有满足下述条件的投保人的投保金额之和:
查询结果格式如下例所示。
示例 1:
输入:
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 |
±----±---------±---------±----±----+
输出:
±---------+
| tiv_2016 |
±---------+
| 45.00 |
±---------+
解释:
表中的第一条记录和最后一条记录都满足两个条件。
tiv_2015 值为 10 与第三条和第四条记录相同,且其位置是唯一的。
第二条记录不符合任何一个条件。其 tiv_2015 与其他投保人不同,并且位置与第三条记录相同,这也导致了第三条记录不符合题目要求。
因此,结果是第一条记录和最后一条记录的 tiv_2016 之和,即 45 。
单独计算2015年投资金额相同的人,单独计算经纬坐标相同的人,然后合并后计算2016年投资金额总和
如果先计算2015投资金额相同的人,其余不符的记录会被过滤,它们的坐标也被过滤,第二次计算唯一坐标时就判断不准确
# round()保留两位小数
select ROUND(SUM(tiv_2016),2) tiv_2016 from insurance
# 2015投资相同,且坐标唯一,有两人
where tiv_2015 in (
# 找到2015年投资金额相同的人,有三个人
select tiv_2015 from insurance group by tiv_2015 having count(*) > 1
)and concat(lat,lon) in (
# 找到经纬坐标唯一的人,有两个人
select concat(lat, lon) from insurance group by lat, lon having count(*) = 1
)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。