窗口函数可在不改变原始数据行数的情况下进行排名、累计求和、移动平均等分析。其语法为function_name() OVER (PARTITION BY col ORDER BY col),支持RANK()、ROW_NUMBER()、SUM() OVER()等函数,适用于MySQL 8.0+。与GROUP BY不同,窗口函数保留每行数据并增加计算列,常用于Top N、同比环比、移动平均等场景,配合索引和合理窗口设计可提升性能。

MySQL窗口函数,简单来说,就是让你在查询结果的“窗口”内进行计算,而不用像GROUP BY那样把数据聚合起来。它既能保留原始数据的完整性,又能进行灵活的分析,简直是数据分析的利器!
窗口函数让你在不改变原始数据行的情况下,进行诸如排名、累计求和、移动平均等操作。
解决方案
窗口函数的基本语法是:
function_name() OVER (PARTITION BY column1 ORDER BY column2)
function_name()
RANK()
SUM()
AVG()
OVER()
PARTITION BY column1
column1
PARTITION BY
ORDER BY column2
column2
几个常用的窗口函数:
ROW_NUMBER()
RANK()
DENSE_RANK()
RANK()
NTILE(n)
n
SUM() OVER()
AVG() OVER()
LAG(column, n, default)
n
column
n
default
LEAD(column, n, default)
n
column
n
default
举个例子:
假设我们有一个
sales
date
region
amount
CREATE TABLE sales (
    date DATE,
    region VARCHAR(20),
    amount DECIMAL(10, 2)
);
INSERT INTO sales (date, region, amount) VALUES
('2023-01-01', 'North', 100.00),
('2023-01-01', 'South', 150.00),
('2023-01-02', 'North', 120.00),
('2023-01-02', 'South', 180.00),
('2023-01-03', 'North', 110.00),
('2023-01-03', 'South', 200.00);1. 计算每个区域的销售额排名:
SELECT
    date,
    region,
    amount,
    RANK() OVER (PARTITION BY region ORDER BY amount DESC) AS sales_rank
FROM
    sales;这个查询会按照
region
amount
2. 计算每个区域的累计销售额:
SELECT
    date,
    region,
    amount,
    SUM(amount) OVER (PARTITION BY region ORDER BY date) AS cumulative_sales
FROM
    sales;这个查询会按照
region
date
3. 计算每个区域的移动平均销售额(过去三天):
SELECT
    date,
    region,
    amount,
    AVG(amount) OVER (PARTITION BY region ORDER BY date ASC ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) AS moving_average
FROM
    sales;这个查询会按照
region
date
ROWS BETWEEN 2 PRECEDING AND CURRENT ROW
MySQL 8.0 之后才开始支持窗口函数,如果你的MySQL版本低于8.0,需要升级才能使用。
MySQL窗口函数有哪些常见的应用场景?
窗口函数在数据分析中应用广泛,可以解决很多复杂的排名、统计和比较问题。
窗口函数能做到的,很多情况下使用子查询或者临时表也能实现,但窗口函数通常更简洁、更高效。
如何优化MySQL窗口函数的性能?
窗口函数虽然强大,但如果使用不当,也可能导致性能问题。
PARTITION BY
ORDER BY
ORDER BY
窗口函数和GROUP BY的区别是什么?
GROUP BY
GROUP BY
简单来说,
GROUP BY
什么时候应该使用窗口函数,什么时候应该使用GROUP BY?
GROUP BY
总的来说,选择哪个取决于你的具体需求。 窗口函数在需要保留原始数据的详细信息,并同时进行聚合计算时,优势非常明显。
以上就是MySQL窗口函数入门到精通:实现复杂数据分析与排名的详细内容,更多请关注php中文网其它相关文章!
 
                        
                        每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
 
                 
                                
                                 收藏
收藏
                                                                             
                                
                                 收藏
收藏
                                                                             
                                
                                 收藏
收藏
                                                                            Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号