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 DESCcontrario 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_namees una expresión (0 - col_name), que acepta la cláusula ORDER BY. Por supuesto, esto solo funciona para columnas numéricas.dateytimecolumnas 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 FIRSTpara 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 BYdeclaració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áspositionen la base de datos).fuente
fuente
Para una
DATEcolumna 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 DESCfuente
Esto está funcionando bien:
fuente
¿Por qué no ordena por NULLS ULTIMO?
fuente
NULLS LAST- ¿Qué versión de MySQL se introdujo?