【MySQL】根据某一字段累加计算出每一行数据形成新字段(累积求和)
2023-12-25 12:15:29
力扣题
1、题目地址
2、模拟表
表: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 表示候车乘客的体重,以千克为单位。
3、要求
有一队乘客在等着上巴士。然而,巴士有1000 千克 的重量限制,所以其中一部分乘客可能无法上巴士。
编写解决方案找出 最后一个 上巴士且不超过重量限制的乘客,并报告 person_name 。
题目测试用例确保顺位第一的人可以上巴士且不会超重。
返回结果格式如下所示。
示例 1:
输入:
Queue 表
person_id | person_name | weight | turn |
---|---|---|---|
5 | Alice | 250 | 1 |
4 | Bob | 175 | 5 |
3 | Alex | 350 | 2 |
6 | John Cena | 400 | 3 |
1 | Winston | 500 | 6 |
2 | Marie | 200 | 4 |
输出:
person_name |
---|
John Cena |
解释:
为了简化,Queue 表按 turn 列由小到大排序。
+------+----+-----------+--------+--------------+
| Turn | ID | Name | Weight | Total Weight |
+------+----+-----------+--------+--------------+
| 1 | 5 | Alice | 250 | 250 |
| 2 | 3 | Alex | 350 | 600 |
| 3 | 6 | John Cena | 400 | 1000 | (最后一个上巴士)
| 4 | 2 | Marie | 200 | 1200 | (无法上巴士)
| 5 | 4 | Bob | 175 | ___ |
| 6 | 1 | Winston | 500 | ___ |
+------+----+-----------+--------+--------------+
4、代码编写
思路
SELECT a.turn, a.person_name, a.weight, SUM(b.weight) AS weightSum
FROM Queue a, Queue b
WHERE a.turn >= b.turn
GROUP BY a.turn
ORDER BY a.turn
| turn | person_name | weight | weightSum |
| ---- | ----------- | ------ | --------- |
| 1 | Alice | 250 | 250 |
| 2 | Alex | 350 | 600 |
| 3 | John Cena | 400 | 1000 |
| 4 | Marie | 200 | 1200 |
| 5 | Bob | 175 | 1375 |
| 6 | Winston | 500 | 1875 |
取体重累积小于或等于 1000 的数据
SELECT a.turn, a.person_name, a.weight, SUM(b.weight) AS weightSum
FROM Queue a, Queue b
WHERE a.turn >= b.turn
GROUP BY a.turn
HAVING weightSum <= 1000
ORDER BY a.turn
| turn | person_name | weight | weightSum |
| ---- | ----------- | ------ | --------- |
| 1 | Alice | 250 | 250 |
| 2 | Alex | 350 | 600 |
| 3 | John Cena | 400 | 1000 |
之后排序改成倒序,取第一行数据即可
最终写法
SELECT a.person_name
FROM Queue a, Queue b
WHERE a.turn >= b.turn
GROUP BY a.turn
HAVING SUM(b.weight) <= 1000
ORDER BY a.turn DESC
LIMIT 1
| person_name |
| ----------- |
| John Cena |
参考
文章来源:https://blog.csdn.net/weixin_50223520/article/details/135191117
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!