Estoy leyendo un código antiguo en el trabajo y he notado que hay varias vistas con una order by 1
cláusula. ¿Qué logra esto?
Ejemplo:
Create view v_payment_summary AS
SELECT A.PAYMENT_DATE,
(SELECT SUM(paymentamount)
FROM payment B
WHERE PAYMENT_DATE = B.PAYMENT_DATE
and SOME CONDITION) AS SUM_X,
(SELECT SUM(paymentamount)
FROM payment B
WHERE PAYMENT_DATE = B.PAYMENT_DATE
and SOME OTHER CONDITION) AS SUM_Y
FROM payment A
ORDER BY 1;
sql
sql-order-by
eco
fuente
fuente
ORDER BY
en unVIEW
. SQL estándar no lo permite. SQL Server lo ha prohibido desde 2005. Para la implementación de SQL que lo permite, el comportamiento es en gran parte indocumentado y contra intuitivo. En otras palabras, definitivamente debe evitarse.TOP
está presente, y a SSMS le encanta agregarTOP 100 PERCENT
.CHECK
restricción en unCREATE TABLE
pero no la cumple, ¡en realidad nunca se verifica! La pregunta es, ¿estos productos SQL siempre respetan lasORDER BY
vistas in, por ejemplo, cuando se usan en una consulta que también tiene un orden deORDER BY
dos veces? ¿Incluso documentan el comportamiento o tienes que mirar los planes de ejecución para resolverlo? Creo que sabemos las respuestas;)ORDER BY 1
... usar un truco de aplicación cruzada donde quieres un alias en blanco. Desafortunadamente, el código, por ejemplo, es demasiado grande para un comentario, así que lo publiqué como respuesta debajo de FYI.Respuestas:
Esta:
... se conoce como "Ordinal": el número representa la columna en función del número de columnas definidas en la cláusula SELECT. En la consulta que proporcionó, significa:
No es una práctica recomendada porque:
fuente
sql
etiqueta. En SQL estándar, solo los nombres de correlación de columna están permitidos en laOREDER BY
cláusula porque, en teoría, los nombres de correlación de tabla están fuera del alcance, es decir, deberían estarloORDER BY PAYMENT_DATE;
. Por supuesto, no todas las implementaciones de SQL cumplen con los estándares.;WITH cte AS( SELECT 1 AS Col1, 'z' AS Col2 UNION SELECT 2 AS Col1, 'y' AS Col2 UNION SELECT 3 AS Col1, 'x' AS Col2 ) SELECT Col2, Col1 FROM cte ORDER BY 1
Esto es útil cuando utiliza operadores basados en conjuntos, por ejemplo, unión
fuente
order by tablea.cola
simplemente significa ordenar la vista o tabla por primera columna del resultado de la consulta.
fuente
Creo en Oracle significa ordenar por columna # 1
fuente
Esto ordenará sus resultados por la primera columna devuelta. En el ejemplo, se ordenará por payment_date.
fuente
Como se menciona en otras respuestas
ORDER BY 1
pedidos de por la primera columna.Sin embargo, me encontré con otro ejemplo de dónde podrías usarlo. Tenemos ciertas consultas que deben ordenarse, seleccione la misma columna. Obtendría un error de SQL si ordenara
Name
en el siguiente.fuente
Ver también:
http://www.techonthenet.com/sql/order_by.php
Para una descripción del orden por. ¡Aprendí algo! :)
También he usado esto en el pasado cuando quería agregar un número indeterminado de filtros a una instrucción sql. Descuidado, lo sé, pero funcionó. :PAGS
fuente
Un ejemplo de una base de datos de prueba del servidor WAMP:
Y cuando se da adicional
order by PRIVILEGE_TYPE
o se puede darorder by 3
. Observe que la tercera columna (PRIVILEGE_TYPE
) se ordena alfabéticamente.DEFINITIVAMENTE, una respuesta larga y mucho desplazamiento. También me costó mucho pasar el resultado de las consultas a un archivo de texto. Aquí es cómo hacerlo sin usar la
into outfile
cosa molesta.Y cuando haya terminado, detenga el registro.
Espero que agregue más claridad.
fuente