Curiosidad en la sintaxis del SELECT
Escrito por Alex Barros Hace poco descubrí una curiosidad de SQL símplemente revisando la documentación del SELECT. Por eso creo que es interesante repasar la sintaxis oficial, para que no se nos escape nada.
-
SELECT
-
[ALL | DISTINCT | DISTINCTROW ]
-
[HIGH_PRIORITY]
-
[STRAIGHT_JOIN]
-
[SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT]
-
[SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS]
-
select_expr, …
-
[FROM table_references
-
[WHERE where_condition]
-
[GROUP BY {col_name | expr | position}
-
[ASC | DESC], … [WITH ROLLUP]]
-
[HAVING where_condition]
-
[ORDER BY {col_name | expr | position}
-
[ASC | DESC], …]
-
[LIMIT {[offset,] row_count | row_count OFFSET offset}]
-
[PROCEDURE procedure_name(argument_list)]
-
[INTO OUTFILE ‘file_name’ export_options
-
| INTO DUMPFILE ‘file_name’
-
| INTO var_name [, var_name]]
-
[FOR UPDATE | LOCK IN SHARE MODE]]
La curiosidad
Lo que yo desconocía es que es posible ordenar los resultados por dos campos o más. Es decir, hacer la ordenación en función de varios parámetros.
Un ejemplo:
-
SELECT a,b,c FROM mi_tabla WHERE a > 100 ORDER BY b,c
En este Select, los resultados son ordenados según b y c de la mejor forma posible. Puede que ni b ni c queden ordenados estrictamente, sinó que adoptan las mejores posiciones para estar ordenados por ambos a la vez.
Yendo más lejos aún, podemos especificar campo a campo si queremos que se ordene ascendentemente o descendientemente, combinando varios criterios.
-
SELECT a,b,c FROM mi_tabla WHERE a > 100 ORDER BY b ASC,c DESC
Categorias: MySQL |



Respeta el copyleft
Octubre
10:33 hanok Ha dicho:
Buenas, solo como aclaración (ya que tal y como lo comentas puede parecer que la ordenación es aleatoria), no es que no queden ordenados estrictamente sino que se ordenará por b y, para cada valor de b, se ordena por c. Es decir:
b c
—————-
1 A
1 B
1 C
2 A
2 B
…
Un saludote
Octubre
11:36 Alex Barros Ha dicho:
Gracias por la aclaración, hanok. No había reparado en el algoritmo concreto de ordenación, símplemente lo había probado sobre una tabla de prueba, y había notado que los resultados quedaban ordenados por ambos al mismo tiempo.
Realmente era una característica que necesitaba urgentemente, así que al ver que funcionaba la emoción me impidió ir más allá u_u