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

MySQL如何筛选无重复国家记录的查询方法求助

解决方法

首先明确核心问题:你需要的是仅保留表中Country只出现一次的记录,而SELECT DISTINCT country, number, state是对整行的列组合去重,当同一Country对应不同的Number/State时会保留多条,自然达不到预期效果。

以下是两种实用的解决方法:

方法1:分组统计子查询(兼容所有主流数据库)

先统计每个Country的出现次数,再筛选出仅出现一次的记录:

SELECT Country, Number, State
FROM tbl_country
WHERE Country IN (
    SELECT Country
    FROM tbl_country
    GROUP BY Country
    HAVING COUNT(*) = 1
);

如果需要同时获取Id列,可改用内连接:

SELECT t.Id, t.Country, t.Number, t.State
FROM tbl_country t
INNER JOIN (
    SELECT Country
    FROM tbl_country
    GROUP BY Country
    HAVING COUNT(*) = 1
) cnt ON t.Country = cnt.Country;

方法2:窗口函数(适用于MySQL 8.0+、PostgreSQL、SQL Server等新版本数据库)

通过窗口函数标记每个Country的出现次数,再筛选结果:

SELECT Country, Number, State
FROM (
    SELECT 
        Country, Number, State,
        COUNT(*) OVER (PARTITION BY Country) AS country_count
    FROM tbl_country
) t
WHERE country_count = 1;

补充说明

如果你的实际需求是每个Country只取任意一条记录(即使存在重复Country),可以用窗口函数取分组内第一条:

SELECT Country, Number, State
FROM (
    SELECT 
        Country, Number, State,
        ROW_NUMBER() OVER (PARTITION BY Country ORDER BY Id) AS row_num
    FROM tbl_country
) t
WHERE row_num = 1;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 00:07:18