|
6 | 6 |
|
7 | 7 | <!-- 这里写题目描述 -->
|
8 | 8 |
|
9 |
| -<p>写一个查询语句,将 2016 年 (<strong>TIV_2016</strong>) 所有成功投资的金额加起来,保留 2 位小数。</p> |
10 |
| - |
11 |
| -<p>对于一个投保人,他在 2016 年成功投资的条件是:</p> |
12 |
| - |
13 |
| -<ol> |
14 |
| - <li>他在 2015 年的投保额 (<strong>TIV_2015</strong>) 至少跟一个其他投保人在 2015 年的投保额相同。</li> |
15 |
| - <li>他所在的城市必须与其他投保人都不同(也就是说维度和经度不能跟其他任何一个投保人完全相同)。</li> |
16 |
| -</ol> |
17 |
| - |
18 |
| -<p><strong>输入格式:</strong><br> |
19 |
| -表 <strong><em>insurance</em></strong> 格式如下:</p> |
20 |
| - |
21 |
| -<pre>| Column Name | Type | |
22 |
| -|-------------|---------------| |
23 |
| -| PID | INTEGER(11) | |
24 |
| -| TIV_2015 | NUMERIC(15,2) | |
25 |
| -| TIV_2016 | NUMERIC(15,2) | |
26 |
| -| LAT | NUMERIC(5,2) | |
27 |
| -| LON | NUMERIC(5,2) | |
28 |
| -</pre> |
29 |
| - |
30 |
| -<p><strong>PID</strong> 字段是投保人的投保编号, <strong>TIV_2015</strong> 是该投保人在2015年的总投保金额, <strong>TIV_2016</strong> 是该投保人在2016年的投保金额, <strong>LAT</strong> 是投保人所在城市的维度, <strong>LON</strong> 是投保人所在城市的经度。</p> |
31 |
| - |
32 |
| -<p><strong>样例输入</strong></p> |
33 |
| - |
34 |
| -<pre>| PID | TIV_2015 | TIV_2016 | LAT | LON | |
35 |
| -|-----|----------|----------|-----|-----| |
| 9 | +<p><code>Insurance</code> 表:</p> |
| 10 | + |
| 11 | +<div class="original__bRMd"> |
| 12 | +<div> |
| 13 | +<pre> |
| 14 | ++-------------+-------+ |
| 15 | +| Column Name | Type | |
| 16 | ++-------------+-------+ |
| 17 | +| pid | int | |
| 18 | +| tiv_2015 | float | |
| 19 | +| tiv_2016 | float | |
| 20 | +| lat | float | |
| 21 | +| lon | float | |
| 22 | ++-------------+-------+ |
| 23 | +pid 是这张表的主键。 |
| 24 | +表中的每一行都包含一条保险信息,其中: |
| 25 | +pid 是投保人的投保编号。 |
| 26 | +tiv_2015 是该投保人在 2015 年的总投保金额,tiv_2016 是该投保人在 2016 年的总投保金额。 |
| 27 | +lat 是投保人所在城市的纬度。题目数据确保 lat 不为空。 |
| 28 | +lon 是投保人所在城市的经度。题目数据确保 lon 不为空。</pre> |
| 29 | + |
| 30 | +<p> </p> |
| 31 | + |
| 32 | +<p>请你编写一个 SQL 查询,报告 2016 年 (<code>tiv_2016</code>) 所有满足下述条件的投保人的投保金额之和:</p> |
| 33 | + |
| 34 | +<ul> |
| 35 | + <li>他在 2015 年的投保额 (<code>tiv_2015</code>) 至少跟一个其他投保人在 2015 年的投保额相同。</li> |
| 36 | + <li>他所在的城市必须与其他投保人都不同(也就是说 (<code>lat, lon</code>) 不能跟其他任何一个投保人完全相同)。</li> |
| 37 | +</ul> |
| 38 | + |
| 39 | +<p><code>tiv_2016</code> 四舍五入的 <strong>两位小数</strong> 。</p> |
| 40 | + |
| 41 | +<p>查询结果格式如下例所示。</p> |
| 42 | + |
| 43 | +<p> </p> |
| 44 | + |
| 45 | +<p><strong class="example">示例:</strong></p> |
| 46 | + |
| 47 | +<pre> |
| 48 | +<strong>输入:</strong> |
| 49 | +Insurance 表: |
| 50 | ++-----+----------+----------+-----+-----+ |
| 51 | +| pid | tiv_2015 | tiv_2016 | lat | lon | |
| 52 | ++-----+----------+----------+-----+-----+ |
36 | 53 | | 1 | 10 | 5 | 10 | 10 |
|
37 | 54 | | 2 | 20 | 20 | 20 | 20 |
|
38 | 55 | | 3 | 10 | 30 | 20 | 20 |
|
39 | 56 | | 4 | 10 | 40 | 40 | 40 |
|
40 |
| -</pre> |
41 |
| - |
42 |
| -<p><strong>样例输出</strong></p> |
43 |
| - |
44 |
| -<pre>| TIV_2016 | |
45 |
| -|----------| |
| 57 | ++-----+----------+----------+-----+-----+ |
| 58 | +<strong>输出:</strong> |
| 59 | ++----------+ |
| 60 | +| tiv_2016 | |
| 61 | ++----------+ |
46 | 62 | | 45.00 |
|
47 |
| -</pre> |
48 |
| - |
49 |
| -<p><strong>解释</strong></p> |
50 |
| - |
51 |
| -<pre>就如最后一个投保人,第一个投保人同时满足两个条件: |
52 |
| -1. 他在 2015 年的投保金额 <strong>TIV_2015 </strong>为 '10' ,与第三个和第四个投保人在 2015 年的投保金额相同。 |
53 |
| -2. 他所在城市的经纬度是独一无二的。 |
54 |
| - |
55 |
| -第二个投保人两个条件都不满足。他在 2015 年的投资 <strong>TIV_2015 </strong>与其他任何投保人都不相同。 |
56 |
| -且他所在城市的经纬度与第三个投保人相同。基于同样的原因,第三个投保人投资失败。 |
57 |
| - |
58 |
| -所以返回的结果是第一个投保人和最后一个投保人的 <strong>TIV_2016 </strong>之和,结果是 45 。</pre> |
| 63 | ++----------+ |
| 64 | +<strong>解释: |
| 65 | +</strong>表中的第一条记录和最后一条记录都满足两个条件。 |
| 66 | +tiv_2015 值为 10 与第三条和第四条记录相同,且其位置是唯一的。 |
| 67 | +第二条记录不符合任何一个条件。其 tiv_2015 与其他投保人不同,并且位置与第三条记录相同,这也导致了第三条记录不符合题目要求。 |
| 68 | +因此,结果是第一条记录和最后一条记录的 tiv_2016 之和,即 45 。</pre> |
| 69 | +</div> |
| 70 | +</div> |
59 | 71 |
|
60 | 72 | ## 解法
|
61 | 73 |
|
|
0 commit comments