首页 > 解决方案 > MySQL 中窗口函数的约束和限制

问题描述

我正在寻找像 RANK() 这样的窗口函数不适用于特定类型表中的特定字段的任何限制。当我通过对 int 特定字段进行分区进行排名时,排名是正确完成的,但是当我尝试对 bigint 特定字段进行排名时,表中的每个元组的排名都是 1 并且不根据提到的分区进行排名。

SELECT
  category, 
  price,
  pid,
  RANK() OVER( PARTITION BY price ) AS myrank 
FROM 
  products;

仅供参考,上面的代码排名不正确。价格是 bigint 类型

如果我使用类型为 int 的类别进行分区,则效果很好......但与我使用价格进行分区的类别不同,但它无法正常工作。

标签: mysql

解决方案


在没有子句RANK的情况下使用没有多大意义。ORDER BY以下两个查询中的任何一个都是 的合理用法RANK

SELECT category, price, pid, RANK() OVER (ORDER BY price) myrank
FROM products;

SELECT category, price, pid, RANK() OVER (PARTITION BY category ORDER BY price) myrank
FROM products;

第一个查询将根据价格为整个表中的每条记录分配一个排名。第二个查询也将根据价格分配一个排名,但它会为每个类别维护单独的排名。


推荐阅读