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

如何编写SQL语句筛选Place相同且Year一致的数据?

解决你的SQL筛选需求

我来帮你搞定这个查询!你的需求是找出同一Place下有多条记录,且这些记录的Year值完全相同的所有条目,对吧?结合你给出的示例数据,这里有两种简洁的实现方法:

方法一:分组子查询筛选合法Place

这种方法先通过分组找出符合条件的Place,再关联原表获取完整记录:

SELECT t.*
FROM your_table t
INNER JOIN (
    -- 筛选出:有至少2条记录,且所有Year值一致的Place
    SELECT Place
    FROM your_table
    GROUP BY Place
    HAVING COUNT(*) >= 2 AND MIN(Year) = MAX(Year)
) valid_places ON t.Place = valid_places.Place;

逻辑说明:

  • GROUP BY Place 按地点分组
  • COUNT(*) >= 2 确保该Place有重复记录(满足你“Place值相同的记录”的筛选前提)
  • MIN(Year) = MAX(Year) 保证该组内所有Year值完全一致(最小和最大相等意味着没有不同值)

方法二:窗口函数实现(更直观)

用窗口函数可以直接在每条记录上标记它所属Place的统计信息,再筛选:

SELECT Numbers, No, ZNo, Place, Year, AId, ABC
FROM (
    SELECT *,
           -- 统计当前Place的总记录数
           COUNT(*) OVER (PARTITION BY Place) AS place_record_count,
           -- 统计当前Place下不同Year的数量
           COUNT(DISTINCT Year) OVER (PARTITION BY Place) AS distinct_year_count
    FROM your_table
) filtered
WHERE place_record_count >= 2 AND distinct_year_count = 1;

逻辑说明:

  • PARTITION BY Place 按地点划分窗口,计算每个Place的统计值
  • place_record_count >=2 筛选出有重复记录的Place
  • distinct_year_count =1 确保该Place下所有Year值都相同

这两种方法都能精准返回你期望的结果,你可以根据自己使用的数据库(比如MySQL、PostgreSQL等)选择更顺手的方式——两种语法在主流数据库里都支持哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 13:42:30