Estou lendo alguns códigos antigos no trabalho e notei que existem várias visualizações com uma order by 1
cláusula. O que isso faz?
Exemplo:
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
fonte
fonte
ORDER BY
emVIEW
. SQL padrão não permite isso. O SQL Server a proíbe desde 2005. Para a implementação do SQL que permite, o comportamento é amplamente indocumentado e contra-intuitivo. Em outras palavras, definitivamente deve ser evitado.TOP
estiver presente e o SSMS adora adicionarTOP 100 PERCENT
.CHECK
restrição em um arquivo,CREATE TABLE
mas na verdade não o honra - ele nunca é verificado! A questão é: esses produtos SQL sempre respeitam asORDER BY
visualizações, por exemplo, quando usados em uma consulta que também possui umORDER BY
, são classificados duas vezes? Eles documentam o comportamento ou você precisa procurar os planos de execução para resolvê-lo? Eu acho que sabemos as respostas;)ORDER BY 1
... usando um truque de aplicação cruzada, onde você deseja um alias em branco. Infelizmente, o código, por exemplo, é muito grande para um comentário, então eu o publiquei como resposta abaixo para sua informação.Respostas:
Este:
... é conhecido como "Ordinal" - o número representa a coluna com base no número de colunas definido na cláusula SELECT. Na consulta que você forneceu, isso significa:
Não é uma prática recomendada, porque:
fonte
sql
tag. No SQL padrão, apenas os nomes de correlação de coluna são permitidos naOREDER BY
cláusula porque, em teoria, os nomes de correlação de tabela estão fora do escopo, ou seja, deveriam estarORDER BY PAYMENT_DATE;
. Obviamente, nem todas as implementações de SQL estão em conformidade com os Padrões.;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
Isso é útil quando você usa operadores baseados em conjuntos, por exemplo, união
fonte
order by tablea.cola
significa simplesmente classificar a visualização ou tabela pela 1ª coluna do resultado da consulta.
fonte
Acredito na Oracle, significa ordem pela coluna # 1
fonte
Isso classificará seus resultados pela primeira coluna retornada. No exemplo, ele classificará por data de pagamento.
fonte
Conforme mencionado em outras respostas,
ORDER BY 1
solicite pela primeira coluna.Me deparei com outro exemplo de onde você pode usá-lo. Temos certas consultas que precisam ser solicitadas e selecione a mesma coluna. Você receberia um erro de SQL ao fazer o pedido
Name
abaixo.fonte
Veja também:
http://www.techonthenet.com/sql/order_by.php
Para uma descrição da ordem de. Eu aprendi alguma coisa! :)
Eu também usei isso no passado quando queria adicionar um número indeterminado de filtros a uma instrução sql. Desleixado, eu sei, mas funcionou. : P
fonte
Um exemplo aqui de um banco de dados de servidor WAMP de teste de amostra: -
E quando é dado adicional
order by PRIVILEGE_TYPE
ou pode ser dadoorder by 3
. Observe a terceira coluna (PRIVILEGE_TYPE
) sendo classificada em ordem alfabética.Definitivamente, uma resposta longa e muita rolagem. Também lutei muito para passar a saída das consultas para um arquivo de texto. Aqui está como fazer isso sem usar a
into outfile
coisa chata :E quando terminar, pare o registro
Espero que adicione mais clareza.
fonte