Salut,
C'est peut être un peu plus lisible comme ça :
SELECT * FROM
(
SELECT id as IDENTIFIANT
--, nom as NOM
, vote_p - vote_m as SCORE
, (SELECT COUNT(*) + 1
FROM "XB_TMP"
WHERE vote_p - vote_m > (t.vote_p - t.vote_m)) AS CLASSEMENT
FROM "XB_TMP" AS t
--ORDER BY CLASSEMENT
) AS RESULT
WHERE CLASSEMENT BETWEEN 1 AND 8
ORDER BY CLASSEMENT
En terme de performance, je ne sais pas si ça change grand chose mais je pense que ça t'évite de calculer 2 fois votes_up - vote_down (j'ai créé une table de test avec vote_p et vote_m à la place).
Ma requête gère les égalités, je n'ai pas testé la tienne...
Tu peux remplacer le * du SELECT * par les champs que tu veux, ça sera plus propre aussi...
Bon courage,