Sybase ASE:计算每个分组类别的排名

时间:2017-09-17 18:09:23

标签: sql tsql sybase sybase-ase rank

我正在使用Sybase ASE 15.7,它不支持RANK()或任何其他窗口函数。

我正在尝试计算按产品类别分组的排名。

考虑以下PRODUCTS表,其中包含大约200万条记录。

PROD_CATEGORY | PROD_NAME          | PROD_SALES  
---------------------------------------------  
Laptops       | Dell Inspiron      | 1000
Laptops       | Lenovo Thinkpad    | 800
Laptops       | Dell Latitude      | 500
Laptops       | Acer Aspire        | 1000
Printers      | Canon Pixma        | 2500
Printers      | HP OfficeJet       | 800
Printers      | HP DeskJet         | 1200
Desktops      | Lenovo ThinkCentre | 900
Desktops      | Asus Chromebox     | 300
Desktops      | HP Pavilion        | 1500

我正在尝试编写一个SQL查询,它将计算按产品类别分组的排名,如下所示:

PROD_CATEGORY | PROD_NAME          | PROD_SALES | SALES_RANK  
------------------------------------------------------------  
Laptops       | Dell Inspiron      | 1000       | 1 
Laptops       | Lenovo Thinkpad    | 800        | 2
Laptops       | Acer Aspire        | 800        | 2
Laptops       | Dell Latitude      | 500        | 4
Printers      | Canon Pixma        | 2500       | 1
Printers      | HP DeskJet         | 1200       | 2
Printers      | HP OfficeJet       | 800        | 3
Desktops      | HP Pavilion        | 1500       | 1
Desktops      | Lenovo ThinkCentre | 900        | 2
Desktops      | Asus Chromebox     | 300        | 3

请注意,具有相同PROD_SALES值的产品会产生并列排名,后续排名会产生差距。

要为表中的所有行生成不带RANK()函数的排名,给定here的标准SQL查询适用于包含200万行的表。

要生成按类别分组的排名,我尝试了here给出的SQL查询但没有成功,因为查询需要很长时间而且没有完成执行。

有没有办法为每个分组类别生成可与Sybase ASE一起使用的等级?

这个问题与this提出的问题类似于MySQL。

1 个答案:

答案 0 :(得分:0)

您可以使用相关子查询计算排名:

catalog -> categories