Actualmente estoy haciendo un OrderBy muy básico en mi declaración.
SELECT * FROM tablename WHERE visible=1 ORDER BY position ASC, id DESC
El problema con esto es que las entradas NULL para 'posición' se tratan como 0. Por lo tanto, todas las entradas con posición como NULL aparecen antes que aquellas con 1,2,3,4. p.ej:
NULL, NULL, NULL, 1, 2, 3, 4
¿Hay alguna manera de lograr el siguiente orden:
1, 2, 3, 4, NULL, NULL, NULL.
mysql
sql-order-by
JonB
fuente
fuente
Respuestas:
MySQL tiene una sintaxis no documentada para ordenar los nulos en último lugar. Coloque un signo menos (-) antes del nombre de la columna y cambie el ASC a DESC:
Es esencialmente lo
position DESC
contrario de colocar los valores NULOS al final, pero por lo demás es lo mismo queposition ASC
.Una buena referencia está aquí http://troels.arvin.dk/db/rdbms#select-order_by
fuente
- col_name
es una expresión (0 - col_name
), que acepta la cláusula ORDER BY. Por supuesto, esto solo funciona para columnas numéricas.date
ytime
columnas también! (MySQL 5.5). Supongo (que soy lento para verificar) funciona para todas las columnas de tipo numérico (marca de tiempo, flotante ...).Encontré que esta es una buena solución en su mayor parte:
fuente
SELECT * FROM table ORDER BY ISNULL(field) ASC;
(MySQL 5.5)NULLS LAST
|NULLS FIRST
para voltearlo en lugar de las soluciones alternativas aquí.Algo como
Reemplace 999999999 con el valor máximo para el campo
fuente
NULO ÚLTIMO
fuente
Puede intercambiar instancias de NULL con un valor diferente para ordenarlas primero (como 0 o -1) o la última (un número grande o una letra) ...
fuente
Intenta usar esta consulta:
fuente
Puede fusionar sus NULL en la
ORDER BY
declaración:Si desea que los NULL se ordenen en la parte inferior, intente
coalesce(position, 100000)
. (Haga el segundo número más grande que todos los demásposition
en la base de datos).fuente
fuente
Para una
DATE
columna puede usar:NULOS últimos:
Los últimos espacios en blanco:
fuente
Para lograr el siguiente resultado:
1, 2, 3, 4, NULL, NULL, NULL.
USE la sintaxis, coloque
-(minus sign)
antes del nombre del campo y use el tipo de orden inverso (como: si desea ordenar por orden ASC, use DESC o si desea orden DESC, use ASC)SELECT * FROM tablename WHERE visible=1 ORDER BY -position DESC
fuente
Esto está funcionando bien:
fuente
¿Por qué no ordena por NULLS ULTIMO?
fuente
NULLS LAST
- ¿Qué versión de MySQL se introdujo?