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

如何编写SQL查询筛选Policy重复但Lon-Lat组合不同的行

嘿,我来帮你搞定这个SQL查询需求!

核心思路

我们需要分两步走:

  • 先找出那些存在至少两组不同(Lon, Lat)坐标的Policy值
  • 再从原表中提取这些Policy对应的所有行,这些就是符合要求的记录

方案一:子查询方式(推荐,效率较高)

这个方法先通过子查询筛选出目标Policy,再关联原表获取数据:

SELECT t.*
FROM `INSURANCE TABLE` t
WHERE t.Policy IN (
    SELECT Policy
    FROM `INSURANCE TABLE`
    GROUP BY Policy
    -- 统计每个Policy下不同的坐标组合数量,大于1说明有不同的坐标
    HAVING COUNT(DISTINCT Lon, Lat) > 1
);

原理说明:

  • 子查询里用GROUP BY Policy分组,COUNT(DISTINCT Lon, Lat)会统计每个Policy对应的唯一坐标组合数,只要这个数大于1,就说明该Policy存在不同的坐标记录
  • 主查询通过IN条件,把原表中属于这些Policy的所有行都筛选出来,正好匹配你要的结果

方案二:自连接方式(逻辑直观)

如果觉得子查询不好理解,也可以用自连接的方式实现:

SELECT DISTINCT t.*
FROM `INSURANCE TABLE` t
JOIN `INSURANCE TABLE` t2
    ON t.Policy = t2.Policy
    -- 匹配同一个Policy下坐标不同的行
    AND (t.Lon != t2.Lon OR t.Lat != t2.Lat);

原理说明:

  • 把表和自己做连接,当两行Policy相同但坐标不同时,就会产生匹配
  • 用DISTINCT去重,因为同一行会被多次匹配(比如行1和行3会互相匹配两次)

验证结果

这两个方案都会返回你预期的结果:

1 | 34564 | 2.0 | 4.0
3 | 34564 | 1.8 | 9.4
4 | 98271 | 4.3 | 2.3
6 | 98271 | 1.3 | 5.6

而Policy 90198的两行坐标完全相同,所以不会被筛选出来,符合要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:44:39