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

SQL实现:查询拥有最长总边境线的州名

查询总边境线最长州的正确SQL实现

针对你的需求,以下是修正后的SQL方案,同时会说明原语句的问题所在:

正确SQL代码

方法1:合并边境记录后汇总排序

SELECT s.name, SUM(b.length) AS total_border_length
FROM state s
INNER JOIN (
    -- 将每条边境记录分别映射到两个关联州
    SELECT code1 AS state_code, length FROM borders
    UNION ALL
    SELECT code2 AS state_code, length FROM borders
) b ON s.code = b.state_code
GROUP BY s.code, s.name
ORDER BY total_border_length DESC
LIMIT 1;

方法2:使用窗口函数处理(支持多州并列最长的场景)

如果存在多个州总边境长度相同且均为最大值的情况,窗口函数可以保留所有符合条件的州:

WITH state_border_totals AS (
    SELECT 
        s.name,
        SUM(b.length) AS total_border_length,
        RANK() OVER (ORDER BY SUM(b.length) DESC) AS rank_num
    FROM state s
    INNER JOIN (
        SELECT code1 AS state_code, length FROM borders
        UNION ALL
        SELECT code2 AS state_code, length FROM borders
    ) b ON s.code = b.state_code
    GROUP BY s.code, s.name
)
SELECT name, total_border_length
FROM state_border_totals
WHERE rank_num = 1;

原SQL语句的问题解析

  1. 边境记录遗漏:原语句仅关联borders表的code1字段,忽略了code2对应的州,导致该州的部分边境长度未被统计,最终结果不准确。
  2. 聚合函数使用错误:
    • 直接在WHERE子句中调用SUM(b.length)是非法的,聚合函数必须配合GROUP BY分组后使用,筛选聚合结果应使用HAVING子句。
    • 原语句未对州进行分组,也没有排序或限制逻辑,无法筛选出总长度最长的州。
  3. 表名拼写错误:原语句中boarder应为borders。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 10:11:35