Mysql8.0以下版本是不支持窗口函数的,下面简单演示了mysql如何通过@变量实现rank和sum over窗口函数。各位读者可以以此举一反三。

数据准备:
CREATE TABLE sc (
SId VARCHAR(10),
CId VARCHAR(10),
score INT
);
INSERT INTO sc (SId, CId, score)
VALUES
('01', '01', 80),
('01', '02', 90),
('01', '03', 99),
('02', '01', 70),
('02', '02', 60),
('02', '03', 80),
('03', '01', 80),
('03', '02', 80),
('03', '03', 80),
('04', '01', 50),
('04', '02', 30),
('04', '03', 20),
('05', '01', 76),
('05', '03', 77);
CREATE TABLE t_access_times (
USER VARCHAR(10),
DATE DATE,
COUNT INT
);
INSERT INTO t_access_times (USER, DATE, COUNT)
VALUES
('A', '2015-01-02', 5),
('A', '2015-01-03', 15),
('B', '2015-01-01', 5),
('A', '2015-01-04', 8),
('B', '2015-01-05', 25),
('A', '2015-01-06', 5),
('A', '2015-02-02', 4),
('A', '2015-02-06', 6),
('B', '2015-02-06', 10),
('B', '2015-02-07', 5);
复制

实现rank
不分组全局排名
SELECT s.*,@r :=@r + 1 AS rank
FROM sc s,(SELECT @r := 0) r
ORDER BY score DESC;复制
按照班级分组的每个学生成绩排名
SELECT a.cid,a.sid,a.score,a.rank
FROM
(
SELECT s.*,
IF(@p=cid,@r:=@r+1,@r:=1) AS rank,
@p:=cid
FROM sc s,(SELECT @p:=0,@r:=0)r
ORDER BY cid,score DESC
)a;
复制
更多关于rank的示例可以参考:
分组排序求前三?TopN问题?一文教你MySQL各类排序操作
引用自:https://blog.csdn.net/weixin_41261833/article/details/103511400

实现sum over
全表累积求和
SELECT t.*,@c :=@c + COUNT AS accumulate
FROM t_access_times t,(SELECT @c := 0) c
ORDER BY USER,DATE;
复制
分组的累积求和
SELECT a.user,a.date,a.count,a.accumulate
FROM
(
SELECT t.*,
IF(@p=USER,@r:=@r+COUNT,@r:=COUNT) AS accumulate,
@p:=USER
FROM t_access_times t,(SELECT @p:=0,@c:=0)c
ORDER BY USER,DATE
)a;
复制
文章转载自漫谈大数据与数据分析,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
【MySQL 30周年庆】MySQL 8.0 OCP考试限时免费!教你免费领考券
墨天轮小教习
2933次阅读
2025-04-25 18:53:11
MySQL 30 周年庆!MySQL 8.4 认证免费考!这次是认真的。。。
严少安
846次阅读
2025-04-25 15:30:58
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
491次阅读
2025-04-17 17:02:24
MySQL 9.3 正式 GA,我却大失所望,新特性亮点与隐忧并存?
JiekeXu
429次阅读
2025-04-15 23:49:58
3月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
372次阅读
2025-04-15 14:48:05
MySQL 8.0 OCP 1Z0-908 考试解析指南(二)
JiekeXu
284次阅读
2025-04-30 17:37:37
记录MySQL数据库的一些奇怪的迁移需求!
陈举超
276次阅读
2025-04-15 15:27:53
SQL优化 - explain查看SQL执行计划(下)
金同学
266次阅读
2025-05-06 14:40:00
MySQL 8.0 OCP 1Z0-908 考试题解析指南
青年数据库学习互助会
246次阅读
2025-04-30 12:17:54
MySQL 8.4 新特性深度解析:功能增强、废弃项与移除项全指南
JiekeXu
228次阅读
2025-04-18 20:21:32