题目来源:滴滴
目录
- 1 题目
- 2 建表语句
- 3 题解
1 题目
已知有表 t_cost_detail 包含 id 和 money 两列,id 为自增,请累加计算money 值,并求出累加值与 1000 差值最小的记录。
+-----+--------+
| id | money |
+-----+--------+
| 1 | 200 |
| 2 | 300 |
| 3 | 200 |
| 4 | 100 |
| 5 | 150 |
| 6 | 80 |
| 7 | 100 |
| 8 | 200 |
+-----+--------+
样例结果
+-----+--------+
| id | money |
+-----+--------+
| 6 | 80 |
+-----+--------+
2 建表语句
CREATE TABLE IF NOT EXISTS t_cost_detail (id bigint, --idmoney bigint -- money
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS ORC;insert into t_cost_detail(id, money) values
(1,200),
(2,300),
(3,200),
(4,100),
(5,150),
(6,80),
(7,100),
(8,200);
3 题解
selectid,money
from(selectid,money,row_number()over(order by abs_diff) as rnfrom(selectid,money,sum(money) over(order by id) as sum_money,abs(sum(money) over(order by id)-1000) as abs_difffrom t_cost_detail) t) tt
where rn = 1;