mysql模拟开窗函数

mysql使用子查询来模拟开窗函数

今天写一个SQL时需要使用开窗函数,结果发现Mysql在8.0后才开始支持CTE和开窗函数.

我们目前所使用的Mysql版本比较低,所以想了一种通过子查询来模拟的方法, 记录一下。

举个例子:

现在有一张普通的表 table_age,只有三列:ID, name, age.

现在想让查询结果的每一行都带上年龄的总和,也就是实现类似开窗函数的效果

在Mysql 8.0之后 直接用开窗函数就行

1
2
3
4
5
SELECT
    SUM(age) OVER() AS '总年龄',
    table_age.*
FROM
    table_age;

在Mysql 8.0之前, 可以像下面这样写:

1
2
3
4
5
6
select 
	tempT.totalAge as '总年龄',
	table_age.*
from 
	table_age,
	(select sum(age) as "totalAge" from table_age) tempT

其他开窗函数也可以用这样子查询的方法,去模拟实现。

Licensed under CC BY-NC-SA 4.0
最后更新于 2025-05-27 01:51:43
使用 Hugo 构建
主题 StackJimmy 设计