sql - MS ACESS 按多个标准对列进行排名
问题描述
我正在尝试使用排名值创建查询。
我有一张这样的桌子
Ref lenght qty order
A 1000 2 order1
A 1200 1 order2
B 2000 1 order3
C 500 1 order4
排名应该是
Ref lenght qty order rank
A 1000 2 order1 2
A 1200 1 order2 2
B 2000 1 order3 1
C 1100 1 order4 3
对于我的等级,只分析订单的最大价值。
我真的很陌生,但工作需要这个。
任何帮助
解决方案
大概,您想要基于 的排名length
。这在几乎任何其他数据库中都会更简单,但在 MS Access 中,您可以使用:
select t.*, o2.ranking
from (select o.*,
(select count(*)
from (select max(length) as max_length
from order as o2
group by o2.order
) as o2
where o2.max_length >= o.max_length
) as ranking
from (select order, max(length) as max_length
from t
group by order
) as o
) as o2 join
t
on o2.order = t.order;
注意:我只能希望这可以按照您希望的方式处理最大长度的关系。修改该逻辑将非常棘手。
相比之下,在任何合理的数据库中,您都会使用:
select t.*,
dense_rank() over (order by max_length desc) as ranking
from (select t.*,
max(length) over (partition by order) as max_length
from t
) t;
对我来说,这似乎是切换数据库的好理由。
推荐阅读
- android - 如何设置从当前日期起 1 年的日期?
- javascript - 在Javascript中按字符串和数字属性对JSON数组进行排序
- ruby-on-rails - Ruby on Rails 撤消 where 子句
- presto - 将文本字符串拆分为 presto 中的匹配列
- c# - 如何在 C# 中赋值?
- azure - 由于证书错误,与 Azure IoT Hub 的 SSL 握手失败
- r - 从贝叶斯随机效应模型 (JAGS) 中提取预测
- php - PHP 使用查询显示来自 xml 的数据
- javascript - 如何使用 JavaScript 在 Nativescript 中更新列表项 RadListView
- java - 计算字符串的子字符串