2009-08-20 17 views
9

Diciamo che ho un tavolo con karma_up e karma_down. Ogni volta che qualcuno vota, karma_up viene incrementato e ogni volta che qualcuno vota, karma_down viene incrementato di uno. Come posso tirare queste selezioni di righe e ordinarle in base alla somma di questi nuovi valori? ORDER BY (karma_up - karma_down) non sembra funzionare come voglio. Voglio semplicemente le righe con il karma più alto in alto.Ordine per somma di due campi

+0

Il risultato finale di questa domanda era SELECT *, CAST (karma_up - karma_down AS FIRMATO) AS karma_total DAL 'links' ORDER BY DESC karma_total avevo bisogno di CAST perché ero ottenere numeri molto grandi per i miei valori di karma negativo. Questo è ciò che ottengo per non firmare i miei campi karma_up e karma_down ma CAST() era la soluzione. Grazie! –

risposta

19

Molto semplice

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

L'OP vuole il massimo in cima e penso che abbia bisogno di DESC come ha scritto Bill Karwin. –

+0

Grazie. Ho corretto la mia risposta –

0

funziona? In caso contrario, potresti includere i risultati nella tua domanda? Ordinare su un'espressione dovrebbe funzionare come previsto.

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, ho postato una risposta corretta subito dopo aver postato la risposta selezionata. – Pachonk

+1

Tu vinci un po ', ne perdi un po'. Ciò che è importante è che l'OP abbia avuto risposta alla sua domanda. –

+1

Vero, ma solo essere simpatico. – Pachonk