指尖上的记忆指尖上的记忆
首页
  • 基础
  • Laravel框架
  • Symfony框架
  • 基础
  • Gin框架
  • 基础
  • Spring框架
  • 命令
  • Nginx
  • Ai
  • Deploy
  • Docker
  • K8s
  • Micro
  • RabbitMQ
  • Mysql
  • PostgreSsql
  • Redis
  • MongoDb
  • Html
  • Js
  • 前端
  • 后端
  • Git
  • 知识扫盲
  • Golang
🌟 gitHub
首页
  • 基础
  • Laravel框架
  • Symfony框架
  • 基础
  • Gin框架
  • 基础
  • Spring框架
  • 命令
  • Nginx
  • Ai
  • Deploy
  • Docker
  • K8s
  • Micro
  • RabbitMQ
  • Mysql
  • PostgreSsql
  • Redis
  • MongoDb
  • Html
  • Js
  • 前端
  • 后端
  • Git
  • 知识扫盲
  • Golang
🌟 gitHub
mysql8窗口函数, 这只是其中两个窗口函数的使用,,我只是觉得比较方便,所以记录一下
1.ROW_NUMBER
使用案例:
select * from (SELECT
  id,
  name,
  age,
  ROW_NUMBER() OVER (PARTITION BY age ORDER BY name DESC) AS rn
FROM users) as raw_data where rn<3;

主要实现功能:
用户按年龄分组,同时在每个组内按名字排序,只取每个组的前三位,这个和group by 有很大的不同,更方便

ROW_NUMBER 必须配合 OVER 使用

2.RANK
使用案例:
SELECT *
FROM (
  SELECT *,
         RANK() OVER (PARTITION BY event_id ORDER BY price DESC) AS rnk
  FROM tickets
) AS t
WHERE rnk = 1;

主要实现功能:
按event_id分组,获取每个event_id组内加个最高的数据

二者很相似,但是对于price相同的时候,rank 会为相同排序值的行会获得相同的排名(同时会跳号,使用 DENSE_RANK 不会跳号), 而ROW_NUMBER会连续编号(1、2、3、4...