You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写SQL查询获取累计重量超过1000时对应人员的姓名

问题分析

你需要实现的是按turn字段的排队顺序累加重量,找到累计值首次超过1000对应的人员姓名。原有SQL的问题有两点:

  • 自连接条件错误,t2.id = t1.id 只会关联到当前行自身,SUM统计的永远是单条记录的重量,没法实现累计求和效果
  • 筛选逻辑只取了累计小于1000的行,无法直接拿到超出阈值的第一条记录
方案1:窗口函数实现(推荐,兼容MySQL 8.0+/PostgreSQL/SQL Server等所有主流新版数据库)

用SUM()开窗按turn排序做累计求和,再筛选第一个累计值超过1000的记录即可:

SELECT name
FROM (
    SELECT 
        name,
        SUM(weight) OVER (ORDER BY turn ASC) AS cumulative_weight
    FROM line
) t
WHERE cumulative_weight > 1000
ORDER BY cumulative_weight ASC
LIMIT 1;
方案2:自连接实现(兼容不支持窗口函数的老版本数据库)

基于你原有写法调整连接逻辑和筛选规则即可:

SELECT t1.name
FROM line t1
JOIN line t2 ON t2.turn <= t1.turn
GROUP BY t1.id, t1.name, t1.turn, t1.weight
HAVING SUM(t2.weight) > 1000
ORDER BY t1.turn ASC
LIMIT 1;

逻辑说明:关联所有turn小于等于当前行的记录,分组后统计每组的累计重量,筛选出累计超过1000的记录后按turn排序取第一条,就是首次超出阈值的人员。

内容的提问来源于stack exchange,提问作者appl3m4n

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 00:06:02