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

请求修正MySQL查询语句,附stops表结构及数据

嘿,我看到你给出了stops表的结构和部分数据,但还没说清楚你具体要实现什么查询功能呢!不过我先帮你整理下表结构,再举几个这个表常见的查询场景例子,你可以参考或者补充你的具体需求哦~

表结构与示例数据

首先是stops表的创建语句:

CREATE TABLE `stops` ( 
  `LineID` varchar(10) NOT NULL, 
  `StationID` int(11) NOT NULL, 
  `Rank` int(11) NOT NULL, 
  `DistanceToNext` float DEFAULT '0' 
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

你提供的部分插入数据:

INSERT INTO `stops` (`LineID`, `StationID`, `Rank`, `DistanceToNext`) VALUES 
('1', 132, 1, 1.469), 
('1', 90, 2, 1.114), 
('1', 213, 3, 1.462), 
('1', 145, 4, 1.084), 
('1', 239, 5, 0.875), 
('1', 8, 6, 0.727), 
('1', 50, 7, 0.588), 
('1', 112, 8, 0.922), 
('1', 99, ...); -- 后续数据截断,保留原格式

常见查询场景示例

1. 计算某条线路的总长度

比如要算LineID为'1'的线路总长度,直接对DistanceToNext求和即可(最后一个站点的该字段为0,不影响结果):

SELECT SUM(DistanceToNext) AS TotalLineLength
FROM stops
WHERE LineID = '1';

2. 按停靠顺序获取某线路的所有站点

利用Rank字段排序,就能得到线路的真实停靠顺序:

SELECT StationID, Rank, DistanceToNext
FROM stops
WHERE LineID = '1'
ORDER BY Rank ASC;

3. 计算每个站点到线路起点的累计距离

如果你的MySQL版本是8.0及以上,可以用窗口函数实现累计距离计算:

SELECT 
  LineID,
  StationID,
  Rank,
  DistanceToNext,
  SUM(DistanceToNext) OVER (
    PARTITION BY LineID 
    ORDER BY Rank ASC 
    ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
  ) AS CumulativeDistanceFromStart
FROM stops
WHERE LineID = '1';

解释:窗口函数会按线路分组,按停靠顺序排序,自动计算从起点到当前站点的累计距离,最后一个站点的累计值就是线路总长度

4. 查询距离下一站最远的站点

如果要找全表中距离下一站最远的站点:

SELECT StationID, Rank, DistanceToNext
FROM stops
WHERE DistanceToNext = (SELECT MAX(DistanceToNext) FROM stops);

如果要按线路查询:

SELECT StationID, Rank, DistanceToNext
FROM stops
WHERE LineID = '1'
AND DistanceToNext = (SELECT MAX(DistanceToNext) FROM stops WHERE LineID = '1');

如果这些示例都不是你需要的,欢迎补充你的具体需求(比如筛选特定条件、关联其他表、计算某个特定指标等),我再帮你调整查询语句~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:53:32