¿Es posible ordenar cuando los datos provienen de muchos seleccionados y unirlos? Como
Select id,name,age
From Student
Where age < 15
Union
Select id,name,age
From Student
Where Name like "%a%"
¿Cómo puedo ordenar esta consulta por nombre?
Algunos dijeron que puede consultar este aspecto.
Select id,name,age
From Student
Where age < 15 or name like "%a%"
Order by name
Pero en este caso simplemente ignoro esa solución.
sql
sql-order-by
union
Guilgamos
fuente
fuente
Respuestas:
Solo escribe
el orden por se aplica al conjunto de resultados completo
fuente
fuente
xxx UNION yyy ORDER BY zzz
el equivalente sea(xxx UNION yyy) ORDER BY zzz
Para que el ordenamiento se aplique solo a la primera declaración en UNION, puede ponerlo en una subselección con UNION ALL (ambos parecen ser necesarios en Oracle):
O (abordando el comentario de Nicholas Carey) puede garantizar que se ordena el SELECT superior y los resultados aparecen sobre el SELECT inferior de esta manera:
fuente
select
declaración que hace referencia a esa subselección. Según el estándar SQL, el orden de los resultados no está definido salvo unaorder by
cláusula explícita . Lo primeroselect
en su ejemplo probablemente devuelva sus resultados en el orden devuelto por la subselección, pero no está garantizado. Además, eso * no * garantiza el orden del conjunto de resultados de la totalidadunion
(la misma regla en la Norma). Si depende del pedido, eventualmente será mordido.SELECT
.Las otras dos respuestas son correctas, pero pensé que valía la pena señalar que el lugar en el que me quedé atascado no era darse cuenta de que necesitarás ordenar por el alias y asegurarte de que el alias sea el mismo para ambas selecciones ... así que
Tenga en cuenta que estoy usando comillas simples en la primera selección, pero con comillas para los demás.
Eso te dará la clasificación que necesitas.
fuente
SELECT a, b, c FROM (<insert union query here>) AS x;
si realmente desea evitar devolver la columna adicional.Order By
se aplica despuésunion
, así que solo agregue unaorder by
cláusula al final de las declaraciones:fuente
Si quiero que el tipo se aplique solo a uno de UNION si uso Union all:
fuente
Como se indicó en otras respuestas, 'Ordenar por' después de ÚLTIMA unión debe aplicarse a ambos conjuntos de datos unidos por la unión.
Estaba teniendo dos conjuntos de datos pero usando tablas diferentes pero las mismas columnas. 'Ordenar por' después de ÚLTIMA Unión todavía no funcionaba. El uso de ALIAS para la columna utilizada en 'ordenar por' hizo el truco.
Entonces, la solución es usar Alias 'User_Name':
fuente
Puede usar esto:
fuente