mysql - MySQL 中窗口函数的约束和限制
问题描述
我正在寻找像 RANK() 这样的窗口函数不适用于特定类型表中的特定字段的任何限制。当我通过对 int 特定字段进行分区进行排名时,排名是正确完成的,但是当我尝试对 bigint 特定字段进行排名时,表中的每个元组的排名都是 1 并且不根据提到的分区进行排名。
SELECT
category,
price,
pid,
RANK() OVER( PARTITION BY price ) AS myrank
FROM
products;
仅供参考,上面的代码排名不正确。价格是 bigint 类型
如果我使用类型为 int 的类别进行分区,则效果很好......但与我使用价格进行分区的类别不同,但它无法正常工作。
解决方案
在没有子句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;
第一个查询将根据价格为整个表中的每条记录分配一个排名。第二个查询也将根据价格分配一个排名,但它会为每个类别维护单独的排名。
推荐阅读
- r - 由于 getNodeSet {XML} 错误,biomaRt getBM 无法正常工作
- c# - How to sort string Array based on Number?
- javascript - 等待异步函数
- python-3.x - 如何编写返回两个文档之间余弦相似度的方法
- listview - 如何在 Blogger 中永久停用 GridView 并激活 ListView?
- javascript - 如何在 Nextjs 中扩展页面。就像 react-router-dom 中的嵌套开关
- android - 使用 Firebase 应用检查不起作用(调试)
- javascript - 事件侦听器多次触发
- matlab - 如何为我的 MATLAB 光线追踪器选择好的显示参数
- java - 客户端是否应该仅在 REST 需要时提取完整的对象信息或字段?