如何将计算得到的ride_length匹配ride_id后添加至SQLite现有表?
解决方案
1. 先给原表新增ride_length字段
你的all_divvy_tripdata表目前没有这个字段,第一步需要先添加列:
ALTER TABLE all_divvy_tripdata ADD COLUMN ride_length INTEGER;
(这里用INTEGER是因为你用round()得到的是整数,若需要保留小数可以换成NUMERIC类型)
2. 用UPDATE语句匹配ride_id更新字段
INSERT INTO是用来新增行的,你需要的是修改已有行的字段值,所以要用UPDATE结合子查询或JOIN来完成匹配更新:
子查询写法
UPDATE all_divvy_tripdata t1 SET ride_length = ( SELECT round((julianday(ended_at) - julianday(started_at)) * 1440) FROM all_divvy_tripdata t2 WHERE t2.ride_id = t1.ride_id );
JOIN写法(更高效)
如果你的SQL环境支持JOIN式UPDATE(比如SQLite、MySQL),可以用这种方式:
UPDATE all_divvy_tripdata t1 JOIN ( SELECT ride_id, round((julianday(ended_at) - julianday(started_at)) * 1440) as ride_length FROM all_divvy_tripdata ) t2 ON t1.ride_id = t2.ride_id SET t1.ride_length = t2.ride_length;
注意事项
确保ride_id是表的主键或唯一键,这样每个ride_id只会匹配到唯一的计算结果,避免更新出错。
内容的提问来源于stack exchange,提问作者JINGHAO CHEN
相关产品推荐
相关产品推荐

