Articles

SqlSkull

¿Cómo implementar la ordenación personalizada mediante la CLÁUSULA ORDER BY DE SQL ?

A veces tenemos el requisito de ordenar el conjunto de resultados devuelto por la instrucción select en un orden personalizado , como mostrar cualquier valor de columna particular en la parte superior del conjunto de resultados, mientras que el resto puede estar en orden de clasificación estándar.

Se convierte en un desafío, ya que sabemos que la cláusula Order by ordena el conjunto de resultados en orden ascendente o descendente basado en listas de columnas dadas en la instrucción Select y no permite especificar el orden de clasificación para ningún valor específico en la columna.

Intentemos entenderlo con un ejemplo, aquí tenemos una región de tabla de muestra como se muestra a continuación.

CREATE TABLE Region (RegionId INT, Region VARCHAR(10))INSERT INTO Region (RegionID, RegionName)VALUES (1 , 'EASTERN'), (2, 'WESTERN'), (3, 'NORTHEN'), (4, 'SOUTHERN')

Ahora nuestro requisito es mostrar el nombre de región – ‘NORTHEN’ siempre en la parte superior del conjunto de resultados de clasificación, independientemente del orden de clasificación que se use en la instrucción select .

Antes de implementar la consulta de ordenación personalizada para esto, comprobemos si podemos lograr esto simplemente ordenando un resultado de consulta en orden ascendente o descendente basado en el nombre de región.

SELECT * FROM Region ORDER BY RegionName ASC

Como puedes ver, todavía Este está en la parte superior del conjunto de resultados, lo que significa que podemos obtener ‘Northen’ en la parte superior simplemente aplicando el orden de clasificación como ascendente en el nombre de región.

Ahora vamos a comprobar ordenando el resultado en función del nombre de Región en orden descendente.

SELECT * FROM Region ORDER BY RegionName ASC

Puede ver que ordenar el resultado basado en el nombre de región en orden descendente tampoco funciona, lo que significa que para lograrlo debe implementar una clasificación personalizada.

Implementemos la clasificación personalizada para mostrar ‘Northen’ siempre en la parte superior, y el nombre de región restante se ordenará en orden ascendente.

Para implementar esto, debe usar la cláusula order by con la instrucción SQL case como se indica a continuación.

SELECT * FROM Region ORDER BY CASEWHEN RegionName ='NORTHEN' THEN '1' ELSE RegionName END

Como puede ver, Ahora devuelve el ‘Norte’ en la parte superior del conjunto de resultados que es lo que desea ver en el conjunto de resultados y otros valores siguen el orden de clasificación estándar que está en orden ascendente.

¿Qué sucede cuando se utiliza el orden de clasificación como descendente en la instrucción select ?

Como ya hemos visto, ordenando el resultado en orden descendente obtenemos ‘Western’ en la parte superior del conjunto de resultados.

Así que para obtener ‘Northern’ en la parte superior en el conjunto de resultados mientras que otros nombres de región se ordenan en orden descendente, implementaremos la clasificación personalizada como sigue.

SELECT * FROM Region ORDER BY CASE WHEN RegionName ='NORTHEN' THEN 'zzzzzzzz' ELSE RegionName END DESC

Ahora puede ver que Northen está en la parte superior del conjunto de resultados, mientras que otros nombres regionales están ordenados en orden descendente.

Vamos a entender la instrucción anterior, La instrucción mayúscula separada en ORDEN POR caluse reemplace el valor RegionName ‘Northern’ por ‘zzzzzzzz’, ya que esta vez desea mostrar el conjunto de resultados en orden descendente, pero también desea mostrar Northern ‘en la parte superior, por lo que reemplazó el’ Northen ‘con el carácter’zzzzzzzz’. Como el carácter ‘ Z ‘ es siempre la última palabra en el diccionario, y la cláusula order by ordena los datos en el orden del diccionario, por lo tanto, la instrucción devuelve el ‘Northern’ siempre primero, ya que hemos reemplazado el valor ‘Northen’ por ‘zzzzzzzz’ en la instrucción Case, mientras que los valores restantes se ordenan según el orden de clasificación estándar.

Aquí también puede especificar el carácter único ‘ Z ‘ solo cuando esté seguro de que todos los valores de la columna RegionName no tienen valores que comiencen con la letra ‘Z’.

Si es así, para evitar cualquier desajuste en el orden de clasificación, puede especificar sabiamente cualquier carácter de reemplazo para su valor que desee mantener siempre en la parte superior en orden de clasificación.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.