-- 示例代码:根据某个字段去重查询
-- 假设我们有一个名为 `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;
DISTINCT 关键字:SELECT DISTINCT name, email FROM users; 这条语句会返回所有唯一的 name 和 email 组合。如果有多个相同的 name 和 email,则只会返回一条记录。
GROUP BY 和聚合函数:SELECT name, MIN(email) AS email FROM users GROUP BY name; 这条语句会根据 name 字段进行分组,并为每个 name 返回一个最小的 email。你可以根据需要选择其他聚合函数,如 MAX() 或 ANY_VALUE()。
窗口函数:ROW_NUMBER() OVER (PARTITION BY name ORDER BY id) 会为每个 name 分区内的行分配一个唯一的行号,然后通过 WHERE rn = 1 来筛选出每个 name 的第一条记录。这种方式更加灵活,可以根据不同的排序条件来选择要保留的记录。
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站