1.问题描述
引用:
在开窗函数出现之前存在着非常多用 SQL 语句非常难解决的问题,非常多都要通过复杂的相关子查询或者存储过程来完毕。为了解决这些问题,在2003年ISO SQL标准增加了开窗函数,开窗函数的使用使得这些经典的难题能够被轻松的解决。眼下在 MSSQLServer、Oracle、DB2 等主流数据库中都提供了对开窗函数的支持,只是非常遗憾的是 MYSQL 临时还未对开窗函数给予支持。
开窗函数的调用格式为:
函数名(列) OVER(选项)
OVER 关键字表示把函数当成开窗函数而不是聚合函数。SQL 标准允许将所有聚
合函数用做开窗函数,使用OVER 关键字来区分这两种用法。
2.我的回答
至于为什么不支持,那得问MySQL团队了。
不过MySQL中可以通过变通的方式支持开窗函数。
示例:
开窗函数:
SELECT RANK() OVER (PARTITION BY Gender ORDER BY Age)
AS [Partition by Gender],
FirstName,
Age,
Gender
FROM Person
SELECT RANK() OVER (PARTITION BY Gender ORDER BY Age)
AS [Partition by Gender],
FirstName,
Age,
Gender
FROM Person
MySQL实现相同功能:
SELECT first_name,
age,
gender,
@curRank := @curRank + 1 AS rank
FROM person p, (SELECT @curRank := 0) r
ORDER BY age;
first_name,
age,
gender,
@curRank := @curRank + 1 AS rank
FROM person p, (SELECT @curRank := 0) r
ORDER BY age;
其他情况只需把开窗函数转换成MySQL支持的语法即可。
Enjoy!
From My Zhihu Anwser.
3.作者信息
温国兵
- Robin Wen
- CSDN Blog:http://blog.csdn.net/justdb
- Gmail:dbarobinwen@gmail.com
该贴由hui.chen转至本版2014-12-8 9:24:45