2012-06-08 19 views
6

Tengo una tabla PostgreSQL con algunos dobles, ellos almacenan los privilegios. Así que digamos que las columnas son:orden SQL por el valor más alto de dos columnas

pc_1 
pc_2 

Lo que quiero es a la orden por cualquiera de estas dos columnas tiene la cantidad más alta descendente, y luego por la otra columna, de nuevo descendente.

Así que si nuestros datos es, dicen:

id pc_1 pc_2 
1 12.5 11.0 
2 10.0 13.2 
3 13.2 9.0 

seleccionar * de orden mitabla por <something> daría:

2 10.0 13.2 
3 13.2 9.0 
1 12.5 11.0 

Respuesta

16
SELECT * 
FROM mytable 
ORDER BY 
     GREATEST(pc_1, pc_2) DESC, LEAST(pc_1, pc_2) DESC 
+0

Eh, no estoy seguro de que me perdí más grande y al menos todos estos años. ¡Gracias! –

+1

Tenga en cuenta que 'GREATEST' y' LEAST' no son SQL estándar. – Charles

4
select * 
from mytable 
order by 
case when pc_1 > pc_2 then pc_1 else pc_2 end desc, 
case when pc_1 > pc_2 then pc_2 else pc_1 end desc 
Cuestiones relacionadas