2017-09-17 6 views
0

RANK()またはその他のウィンドウ機能をサポートしていないSybase ASE 15.7を使用しています。Sybase ASE:グループ化されたカテゴリごとのランクを計算する

商品カテゴリごとにグループ化されたランクを計算しようとしています。

約2百万レコードのPRODUCTSテーブルを考えてみましょう。

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_SALES価値を持つ製品が結ばランクとその後を生成

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 

注意をランクにはギャップがあります。

テーブル内のすべての行に対してRANK()関数を使用しないランクを生成するには、標準SQLクエリhereは、200万行のテーブルに対してうまく機能します。

カテゴリごとにグループ化されたランクを生成するには、クエリが長い時間がかかり実行が完了しなかったため、hereというSQLクエリを試行しました。

Sybase ASEで動作するグループ化されたカテゴリごとにこのランクを生成する方法はありますか?

この質問は、thisに似ていますので、MySQLの質問がありました。

答えて

0

あなたが相関サブクエリでランクを計算することができます。

select p.*, 
     (select 1 + count(*) 
     from products p2 
     where p2.prod_category = p.prod_category and p2.prod_sales > p.prod_sales 
     ) as rnk 
from products p; 
関連する問題