如何更新Driver表TripTotal列:按司机统计行程数并补0
解决Driver表TripTotal列按司机统计行程数的更新问题
你需要用LEFT JOIN结合分组统计来实现按司机单独计算行程数,同时用COALESCE处理无行程司机的0值显示。正确的SQL语句如下:
UPDATE d SET TripTotal = COALESCE(t.trip_count, 0) FROM Driver d LEFT JOIN ( -- 按司机ID分组统计每个司机的行程数量 SELECT DRIVER_ID, COUNT(*) AS trip_count FROM Trip GROUP BY DRIVER_ID ) t ON d.ID = t.DRIVER_ID;
关键逻辑说明:
LEFT JOIN:确保Driver表中所有司机(包括无行程的ID=5)都能被匹配到,不会被过滤- 子查询分组:通过
GROUP BY DRIVER_ID对Trip表按司机分组,单独统计每个司机的行程总数 COALESCE(t.trip_count, 0):当司机无对应行程时,子查询返回的trip_count为NULL,用该函数将NULL替换为0,满足无行程显示0的需求
你原有语句的问题:
你的SQL没有将Driver表和Trip表通过司机ID关联,也没有分组逻辑,子查询SELECT COUNT(Lnum) FROM TRIP只会统计Trip表的总行程数,导致所有司机的TripTotal都被设置为同一个总数值。
内容的提问来源于stack exchange,提问作者kayley97
相关产品推荐
相关产品推荐

