吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 716|回复: 4
收起左侧

[已解决] 数据库排序自定义并列显示问题

[复制链接]
Samding 发表于 2022-3-11 21:06
本帖最后由 Samding 于 2022-3-20 14:25 编辑

比如有一个数据库,要查询出价格前10的商品,如果是前面价格重复的直接占位(例:10  9  9  9  9  9  8  7  6  5),如果重复后包括最后一项则全部显示(例:10  9  8  7  6  5  4  3  2  2  2  2  2  2  2  2),代码怎么写,mysql或oracle都可以

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

孤狼微博 发表于 2022-3-11 22:18
直接查询了排序 取10个这样可以吗
降龙18掌 发表于 2022-3-11 23:01
冬酒暖阳 发表于 2022-3-12 02:04
本帖最后由 冬酒暖阳 于 2022-3-12 02:08 编辑

https://blog.csdn.net/u013435893/article/details/80350269

我看这篇文章写的还蛮详细的,应该属于并列且占位的情况
ligfoo 发表于 2022-3-14 15:21
使用窗口函数 ROW_NUMBER和DENSE_RANK,然后通过限定rn 和rk来筛选数据,示例如下:
价格   10  9  8  7  6  5  4  3  2  2    2  2  2  2  2  2
RN      1   2  3  4  5  6  7  8  9  10 11
RK      1    2  3  4  5  6  7  8  9   9   9



价格   10  9  9  9  9  9  8  7  6  5   4
RN     1   2   3  4  5  6  7  8  9  10 11
RK     1   2   2   2  2  2  3  4  5  6   7

最后的 WHERE (RN <= 10 AND RK <= 10 ) OR ( RK = 10 AND RN > 10)
如果是前面的数据重复,则不占位,那么RN <= 10即可筛选出要的数据,如果是最后1位的数据重复,那么RK一定是<=10的,WHERE的前一部分条件已经包含了( RK<= 10和RN <= 10)的,剩下另一部分是 RK<= 10但 RN > 10的,这两部分合起来就是要返回的数据了。

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
Samding + 1 + 1 谢谢@Thanks!

查看全部评分

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 16:40

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表