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

请教SQL查询:按要求求和tiv_2012并解决(lat,lon)唯一判断问题

没问题,我来帮你搞定这个SQL查询的问题!

要满足你说的两个条件,我们可以通过两种实用的思路来实现,我都给你列出来:

方法一:用窗口函数(高效推荐)

窗口函数能在一次表扫描中完成两个条件的统计,性能更优。具体SQL如下:

SELECT ROUND(SUM(tiv_2012), 2) AS tiv_2012
FROM (
    SELECT 
        tiv_2012,
        -- 统计当前tiv_2011值在表中出现的总次数
        COUNT(*) OVER (PARTITION BY tiv_2011) AS cnt_tiv2011,
        -- 统计当前(lat, lon)组合出现的总次数
        COUNT(*) OVER (PARTITION BY lat, lon) AS cnt_coords
    FROM insurance
) AS sub_query
-- 筛选出tiv_2011至少出现2次,且坐标唯一的记录
WHERE cnt_tiv2011 >= 2 AND cnt_coords = 1;

方法二:用分组子查询(逻辑直观)

如果对窗口函数不太熟悉,也可以用分组查询先圈出符合条件的tiv_2011和坐标,再筛选求和:

SELECT ROUND(SUM(tiv_2012), 2) AS tiv_2012
FROM insurance
WHERE 
    -- 筛选tiv_2011值存在至少一个其他投保人相同的记录
    tiv_2011 IN (
        SELECT tiv_2011
        FROM insurance
        GROUP BY tiv_2011
        HAVING COUNT(*) >= 2
    )
    -- 筛选坐标唯一的记录
    AND (lat, lon) IN (
        SELECT lat, lon
        FROM insurance
        GROUP BY lat, lon
        HAVING COUNT(*) = 1
    );

补充提醒:

  • ROUND(SUM(tiv_2012), 2) 用来对求和结果保留两位小数,ROUND是MySQL、PostgreSQL、SQL Server等大多数数据库都支持的函数。
  • 如果lat和lon是浮点型字段,可能存在精度误差导致本该相同的坐标被误判为不同。遇到这种情况,可以考虑对坐标做四舍五入后再分组,比如ROUND(lat, 4)和ROUND(lon, 4),具体精度根据你的数据情况调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:19:59