-- 示例数据表:sales
-- +----+--------+---------+------------+
-- | id | region | salesperson | amount |
-- +----+--------+---------+------------+
-- | 1 | North | Alice | 1000 |
-- | 2 | North | Bob | 1500 |
-- | 3 | South | Charlie | 800 |
-- | 4 | South | Diana | 1200 |
-- | 5 | East | Evan | 900 |
-- | 6 | East | Frank | 700 |
-- +----+--------+---------+------------+
-- 目标:按region分组,按amount降序排序,取每组第一个记录
SELECT *
FROM (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY region ORDER BY amount DESC) AS rn
FROM sales
) t
WHERE rn = 1;
-- 解释:
-- 1. 使用窗口函数 ROW_NUMBER() 对每个 region 分组,并按 amount 降序排序。
-- 2. ROW_NUMBER() 为每一行分配一个唯一的行号,从 1 开始,按排序顺序递增。
-- 3. 外部查询中,只选择行号为 1 的记录,即每组中 amount 最大的记录。
上一篇:mysql变量
下一篇:mysql替换函数
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站