题目:
表: Queue
+-------------+---------+ | Column Name | Type | +-------------+---------+ | person_id | int | | person_name | varchar | | weight | int | | turn | int | +-------------+---------+ person_id 是这个表具有唯一值的列。 该表展示了所有候车乘客的信息。 表中 person_id 和 turn 列将包含从 1 到 n 的所有数字,其中 n 是表中的行数。 turn 决定了候车乘客上巴士的顺序,其中 turn=1 表示第一个上巴士,turn=n 表示最后一个上巴士。 weight 表示候车乘客的体重,以千克为单位。
有一队乘客在等着上巴士。然而,巴士有1000
千克 的重量限制,所以其中一部分乘客可能无法上巴士。
编写解决方案找出 最后一个 上巴士且不超过重量限制的乘客,并报告 person_name
。题目测试用例确保顺位第一的人可以上巴士且不会超重。
-- t1代表 将这些人进行排序
with t1 as (select * from queue order by turn),
t2 as -- t2表示 将第一个到自己为止的重量总和求出来,过滤掉不满足1000kg条件的,在求总人数,人数是多少就该第几个人上车
(
select
count(weight) as countT
from
(
select weight,sum(weight) over (rows between unbounded preceding and current row) as sumT from t1
) as t3
where sumT<=1000
)
select person_name from queue where turn = (select * from t2)