2009-08-20 8 views
9

Disons que j'ai une table avec karma_up et karma_down. Chaque fois que quelqu'un vote karma_up est incrémenté et chaque fois que quelqu'un vote karma_down est incrémenté aussi bien. Comment puis-je tirer ces une sélection de lignes et les ordonner par la somme de ces nouvelles valeurs? ORDER BY (karma_up - karma_down) ne semble pas fonctionner comme je le veux. Je veux simplement que les rangs avec le plus haut karma soient en haut.Ordre par somme de deux champs

+0

Le résultat final de cette question était SELECT *, CAST (karma_up - karma_down AS SIGNE) AS karma_total FROM 'links' ORDER BY karma_total DESC je devais CAST parce que j'étais obtenir de très grands nombres pour mes valeurs négatives de karma. C'est ce que je reçois pour désinsérer mes champs karma_up et karma_down mais CAST() était la solution. Merci beaucoup! –

Répondre

19

Très simple

SELECT 
ID, KARMA_UP, KARMA_DOWN, (KARMA_UP-KARMA_DOWN) AS USER_KARMA 
FROM KARMA 
ORDER BY USER_KARMA DESC 
+0

L'OP veut le plus haut sur le dessus et je pense qu'il a besoin de DESC comme Bill Karwin posté. –

+0

Merci. J'ai corrigé ma réponse –

0

ce travail? Si non, pourriez-vous inclure les résultats dans votre question? Commander sur une expression devrait fonctionner comme prévu.

SELECT `post_id`, `karma_up`, `karma_down`, `karma_up` - `karma_down` AS `total` 
ORDER BY `total` DESC 
6
SELECT *, karma_up - karma_down AS karma_total 
FROM MyTable 
ORDER BY karma_total DESC; 
+0

Ouch, posté une réponse correcte juste après la réponse sélectionnée a été posté. – Pachonk

+1

Vous en gagnez, vous en perdez. Ce qui est important, c'est que le PO a obtenu une réponse à sa question. –

+1

Vrai, mais juste être sympathique. – Pachonk