在Pervasive 13中,我正在寻找一种将排名列添加到排序记录集的方法。
例如,让我们假设我有一个customer
表,该表有一个名为profit
的字段(该字段用于指示每个客户的总利润(。不只是按利润排序,我还想包括每个客户基于利润的排名,其中利润最高的客户排名为1
,第二高的客户排名2
,依此类推
select
row_number() as "Rank"
,customer as "Customer"
from customers
order by profit desc
上述row_number()
是概念性的;它实际上在Pervasive 13中不起作用,但我希望还有其他东西可以实现同样的概念来制作一个看起来像这样的唱片集:
Rank |Customer |
-----+-----------------+
1 |LUCRATIVE TECH |
2 |ROY INDUSTRIES |
3 |CRON INC. |
4 |FLEX PRODUCTS |
5 |CATCO CO. |
仅使用SQL查询,如何生成一个包含rank
列的记录集,就像上面Pervasive 13中的那样?
使用更小/制造的数据集,这样的东西似乎对我有用。
create table customers (id identity, customer char(20), profit integer);
insert into customers values (0,'cust1',5);
insert into customers values (0,'cust2',4);
insert into customers values (0,'cust3',1);
insert into customers values (0,'cust4',3);
insert into customers values (0,'cust5',2);
insert into customers values (0,'cust6',2);
select
(select 1 + count(*)
from customers c2
where c2.profit < c.profit
) as "rank"
, c.*
from customers c
order by "rank"
结果:
rank id customer profit
=========== =========== ==================== ===========
1 3 cust3 1
2 5 cust5 2
3 4 cust4 3
4 2 cust2 4
5 1 cust1 5