J'utilise Sybase ASE 15.7 qui ne supporte pas RANK()
ou toute autre fonction de fenêtrage. J'essaie de calculer les rangs regroupés par catégorie de produit. Considérons le tableau suivant PRODUCTS
avec environ 2 millions d'enregistrements.Sybase ASE: Calculer les rangs par catégorie groupée
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
Je suis en train d'écrire une requête SQL qui va calculer les rangs regroupés par catégorie de produit comme ci-dessous:
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
Notez que les produits ayant la même valeur PROD_SALES
génèrent un rang à égalité et la suite les rangs ont un écart en eux.
Pour générer un rang sans la fonction RANK()
pour toutes les lignes de la table, la requête SQL standard here fonctionne bien pour la table avec 2 millions de lignes.
Pour générer le rang groupé par catégorie, j'ai essayé la requête SQL donnée here sans succès car la requête prend beaucoup de temps et n'a pas terminé l'exécution.
Existe-t-il un moyen de générer ce classement par catégorie groupée qui fonctionnera avec Sybase ASE?
Cette question est similaire à this SO question qui a été posée pour MySQL.