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

如何根据Email列唯一值筛选Customers表中的Id?

解决筛选唯一Email对应Id的问题

嘿,我来帮你搞定这个SQL需求!首先咱们先看看你原来的语句为啥没达到预期:

你写的select distinct id, email from customers group by id,其实GROUP BY id是按唯一的Id分组,而每个Id本来就对应唯一一行数据,所以这个语句和直接select id, email from customers没啥区别,根本没处理重复的Email,自然得不到你想要的结果。

接下来给你两种靠谱的解法,都能得到你预期的[1,2,3,5]:

方法一:分组+聚合函数(适用于所有主流数据库)

因为你需要每个唯一Email对应的其中一个Id(这里你选了重复Email里最小的Id),所以可以用GROUP BY Email配合MIN(Id)来实现:

SELECT MIN(Id) AS Id
FROM customers
GROUP BY Email

这个语句的逻辑是:把相同Email的行归为一组,然后从每组里取出最小的Id,这样就得到了每个唯一Email对应的Id,正好符合你的预期结果。如果需要同时显示Email的话,也可以加上Email字段:

SELECT MIN(Id) AS Id, Email
FROM customers
GROUP BY Email

方法二:窗口函数(适用于支持窗口函数的数据库,比如MySQL 8+、PostgreSQL、SQL Server等)

如果你的数据库支持窗口函数,用ROW_NUMBER()会更灵活,比如你想按其他规则选Id(比如最新的Id)也很容易改:

SELECT Id
FROM (
    SELECT 
        Id, 
        Email,
        -- 按Email分组,每组内按Id排序,给每行标序号
        ROW_NUMBER() OVER (PARTITION BY Email ORDER BY Id) AS rn
    FROM customers
) t
-- 只取每组的第一行(也就是Id最小的那行)
WHERE rn = 1

这两种方法都能帮你得到想要的结果,你可以根据自己的数据库版本和需求选择合适的写法~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:29:50