mysql partition by

在MySQL中,PARTITION BY子句用于在OVER()子句中对查询结果进行分区,以便对每个分区应用窗口函数,如RANK(), LEAD(), LAG()等。PARTITION BY子句与GROUP BY子句的主要区别在于,PARTITION BY在查询结果集上执行分区,而GROUP BY在原始数据上执行分组。

以下是PARTITION BY的基本用法:

  1. 基本语法 :
Window_function (expression) OVER (
  PARTITION BY expr [
    ORDER BY clause [
      FRAME_CLAUSE
    ]
  ]
)
  • expression:要应用窗口函数的表达式,可以是列名或内置函数。

  • PARTITION BY expr:指定要根据哪个列进行分区。

  • ORDER BY clause(可选):指定分区内的行排序方式。

  • FRAME_CLAUSE(可选):定义窗口的范围。

  1. GROUP BY的区别 :
  • GROUP BY是在原始数据上执行分组,通常与聚合函数(如COUNT(), SUM(), AVG())一起使用。

  • PARTITION BY是在查询结果集上执行分区,可以保留所有数据,并对其中某些字段进行分组排序。

  1. 示例 :
-- 查询每种型号火车的ID、型号、一等座数量、同型号一等座数量总量
SELECT id, model, first_class_places,
       COUNT(id) OVER (PARTITION BY model) AS total_first_class_seats
FROM train
  1. 注意事项 :
  • PARTITION BY子句必须与OVER()子句一起使用。

  • PARTITION BY子句中的表达式可以是列名,也可以是内置函数。

  • PARTITION BY子句创建的分区也称为窗口。

希望这些信息能帮助你理解MySQL中PARTITION BY的用法。

Top