Laravel  
laravel
文档
数据库
架构
入门
php技术
    
Laravelphp
laravel / php / java / vue / mysql / linux / python / javascript / html / css / c++ / c#

mysql根据某个字段去重查询

作者:醉眼看苍生   发布日期:2025-12-06   浏览:102

-- 示例代码:根据某个字段去重查询

-- 假设我们有一个名为 `users` 的表,结构如下:
-- | id | name  | email          |
-- |----|-------|----------------|
-- | 1  | Alice | alice@example.com |
-- | 2  | Bob   | bob@example.com   |
-- | 3  | Alice | alice@test.com    |
-- | 4  | Carol | carol@example.com |

-- 如果我们想根据 `name` 字段去重查询,可以使用以下 SQL 查询:

SELECT DISTINCT name, email
FROM users;

-- 或者如果我们只想获取每个 `name` 的第一条记录(基于某些排序),可以使用子查询或窗口函数:

-- 使用 GROUP BY 和聚合函数(适用于 MySQL 5.7 及更早版本)
SELECT name, MIN(email) AS email
FROM users
GROUP BY name;

-- 使用窗口函数(适用于 MySQL 8.0 及更高版本)
SELECT name, email
FROM (
    SELECT name, email, ROW_NUMBER() OVER (PARTITION BY name ORDER BY id) AS rn
    FROM users
) t
WHERE rn = 1;

解释说明:

  1. DISTINCT 关键字SELECT DISTINCT name, email FROM users; 这条语句会返回所有唯一的 nameemail 组合。如果有多个相同的 nameemail,则只会返回一条记录。

  2. GROUP BY 和聚合函数SELECT name, MIN(email) AS email FROM users GROUP BY name; 这条语句会根据 name 字段进行分组,并为每个 name 返回一个最小的 email。你可以根据需要选择其他聚合函数,如 MAX()ANY_VALUE()

  3. 窗口函数ROW_NUMBER() OVER (PARTITION BY name ORDER BY id) 会为每个 name 分区内的行分配一个唯一的行号,然后通过 WHERE rn = 1 来筛选出每个 name 的第一条记录。这种方式更加灵活,可以根据不同的排序条件来选择要保留的记录。

上一篇:mysql distinct count

下一篇:python连接mysql数据库增删改查

大家都在看

mysqlavg函数保留小数

mysql显示表内容

mysql经纬度距离计算

mysql 加密

存储过程mysql

mysql 1265

mysql with语句

mysql时间加减

mysql查询表名,模糊匹配

brew 启动mysql

Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3

Laravel 中文站