MySQL 的窗口函数就像给查询装了个显微镜,能帮你按行计算排名、累计和、移动平均这些玩意。用起来挺灵活,比如你想统计每个销售员的月销售排名,写个RANK()
就行,不用多写子查询。
语法上跟普通查询差不多,多了个OVER()
窗口定义,你可以在里面加PARTITION BY
分组、ORDER BY
排序,控制计算范围。比如:
SELECT name, month, sales,
RANK() OVER (PARTITION BY month ORDER BY sales DESC) AS rank
FROM sales_table;
这样一个查询就能搞定月度排名。响应还快,代码也简单。用的时候注意别乱分区,否则结果完全不一样。
哦,对了,如果你还想多学点窗口函数的玩法,可以看看 MySQL 窗口函数简介,或者对比下 SQL Server 2012 窗口函数 的写法,会有不少思路。
如果你经常需要排序、累计或分组统计的表,那窗口函数绝对值得上手。会了它,多原本要绕弯子的查询,一条就能写完。