Buscar..


Utilice ORDER BY con TOP para devolver las filas superiores x basadas en el valor de una columna

En este ejemplo, podemos usar GROUP BY no solo para determinar el tipo de filas devueltas, sino también qué filas se devuelven, ya que estamos usando TOP para limitar el conjunto de resultados.

Digamos que queremos devolver a los 5 principales usuarios con mayor reputación de un sitio de preguntas y respuestas popular sin nombre.

Sin ORDENAR

Esta consulta devuelve las 5 filas principales ordenadas por el valor predeterminado, que en este caso es "Id", la primera columna de la tabla (aunque no es una columna que se muestra en los resultados).

SELECT TOP 5 DisplayName, Reputation
FROM Users

devoluciones...

Nombre para mostrar Reputación
Comunidad 1
Geoff Dalgas 12567
Jarrod dixon 11739
Jeff Atwood 37628
Joel Spolsky 25784

Con ORDENAR

SELECT TOP 5 DisplayName, Reputation
FROM Users
ORDER BY Reputation desc

devoluciones...

Nombre para mostrar Reputación
JonSkeet 865023
Darin Dimitrov 661741
Balus 650237
Hans Passant 625870
Marc Gravell 601636

Observaciones

Algunas versiones de SQL (como MySQL) usan una cláusula LIMIT al final de SELECT , en lugar de TOP al principio, por ejemplo:

SELECT DisplayName, Reputation
FROM Users
ORDER BY Reputation DESC
LIMIT 5

Clasificación por columnas múltiples

SELECT DisplayName, JoinDate, Reputation
FROM Users
ORDER BY JoinDate, Reputation
Nombre para mostrar Fecha de Ingreso Reputación
Comunidad 2008-09-15 1
Jeff Atwood 2008-09-16 25784
Joel Spolsky 2008-09-16 37628
Jarrod dixon 2008-10-03 11739
Geoff Dalgas 2008-10-03 12567

Clasificación por número de columna (en lugar de nombre)

Puede usar el número de una columna (donde la columna de la izquierda es '1') para indicar en qué columna se basa la clasificación, en lugar de describir la columna por su nombre.

Pro: Si crees que es probable que cambies los nombres de las columnas más adelante, hacerlo no romperá este código.

Contras: esto generalmente reducirá la legibilidad de la consulta (se aclara instantáneamente lo que significa 'ORDENAR POR Reputación', mientras que 'ORDENAR POR 14' requiere un recuento, probablemente con un dedo en la pantalla).

Esta consulta ordena el resultado por la información en la posición de columna relativa 3 de la declaración de selección en lugar del nombre de columna Reputation .

SELECT DisplayName, JoinDate, Reputation
FROM Users
ORDER BY 3
Nombre para mostrar Fecha de Ingreso Reputación
Comunidad 2008-09-15 1
Jarrod dixon 2008-10-03 11739
Geoff Dalgas 2008-10-03 12567
Joel Spolsky 2008-09-16 25784
Jeff Atwood 2008-09-16 37628

Ordenar por Alias

Debido al orden de procesamiento de consultas lógicas, el alias se puede usar en orden por.

SELECT DisplayName, JoinDate as jd, Reputation as rep
FROM Users
ORDER BY jd, rep

Y puede usar el orden relativo de las columnas en la declaración de selección. Considere el mismo ejemplo que el anterior y en lugar de usar el alias use el orden relativo, ya que para el nombre de visualización es 1, para Jd es 2 y así sucesivamente

SELECT DisplayName, JoinDate as jd, Reputation as rep
FROM Users
ORDER BY 2, 3

Orden de clasificación personalizado

Para ordenar esta tabla Employee por departamento, usaría ORDER BY Department . Sin embargo, si desea un orden de clasificación diferente que no sea alfabético, debe asignar los valores del Department valores diferentes que se clasifiquen correctamente; Esto se puede hacer con una expresión CASE:

Nombre Departamento
Hasan ESO
Yusuf HORA
Hillary HORA
Joe ESO
Alegre HORA
Conocer Contador
SELECT *
FROM Employee
ORDER BY CASE Department
         WHEN 'HR'         THEN 1
         WHEN 'Accountant' THEN 2
         ELSE                   3
         END;
Nombre Departamento
Yusuf HORA
Hillary HORA
Alegre HORA
Conocer Contador
Hasan ESO
Joe ESO


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow