Czytam stary kod w pracy i zauważyłem, że istnieje kilka widoków z order by 1
klauzulą. Co to daje?
Przykład:
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
Echo
źródło
źródło
ORDER BY
in aVIEW
. Standardowy SQL na to nie pozwala. SQL Server zakazał tego od 2005 roku. W przypadku implementacji SQL, które na to pozwalają, zachowanie jest w dużej mierze nieudokumentowane i sprzeczne z intuicją. Innymi słowy, zdecydowanie należy tego unikać.TOP
jest obecny, a SSMS uwielbia dodawaćTOP 100 PERCENT
.CHECK
ograniczenie w a,CREATE TABLE
ale w rzeczywistości go nie honoruje - w rzeczywistości nigdy nie jest sprawdzane! Pytanie brzmi, czy te produkty SQL zawsze cześćORDER BY
w widokach np użyte w zapytaniu, które również maORDER BY
to dostać któryś dwukrotnie? Czy w ogóle dokumentują zachowanie, czy też musisz spojrzeć na plany wykonania, aby to rozpracować? Myślę, że znamy odpowiedzi;)ORDER BY 1
... używając sztuczki z zastosowaniem krzyżowym, w której potrzebujesz pustego aliasu. Niestety kod np. Jest zbyt duży na komentarz, więc zamieściłem go jako odpowiedź poniżej FYI.Odpowiedzi:
To:
... jest znany jako „porządkowy” - liczba oznacza kolumnę na podstawie liczby kolumn zdefiniowanej w klauzuli SELECT. W podanym przez Ciebie zapytaniu oznacza to:
Nie jest to zalecana praktyka, ponieważ:
źródło
sql
tag. W standardowym języku SQL wOREDER BY
klauzuli dozwolone są tylko nazwy korelacji kolumn , ponieważ teoretycznie nazwy korelacji tabel są poza zakresem, tj. Powinny byćORDER BY PAYMENT_DATE;
. Oczywiście nie wszystkie implementacje SQL są zgodne ze standardami.;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
Jest to przydatne, gdy używasz operatorów opartych na zestawach, np. Union
źródło
order by tablea.cola
oznacza to po prostu sortowanie widoku lub tabeli według pierwszej kolumny wyniku zapytania.
źródło
Wierzę w Oracle, że oznacza to porządkowanie według kolumny # 1
źródło
Spowoduje to posortowanie wyników według pierwszej zwróconej kolumny. W tym przykładzie posortuje się według data_płaty.
źródło
Jak wspomniano w innych odpowiedziach,
ORDER BY 1
porządkowanie według pierwszej kolumny.Natknąłem się jednak na inny przykład, gdzie możesz go użyć. Mamy pewne zapytania, które należy zamówić, wybierz tę samą kolumnę. Możesz otrzymać błąd SQL, jeśli zamówisz przez
Name
poniżej.źródło
Zobacz także:
http://www.techonthenet.com/sql/order_by.php
Aby uzyskać opis zamówienia wg. Nauczyłem się czegoś! :)
Używałem tego również w przeszłości, gdy chciałem dodać nieokreśloną liczbę filtrów do instrukcji sql. Wiem, niechlujny, ale zadziałał. : P
źródło
Przykład z przykładowej testowej bazy danych serwera WAMP: -
A kiedy jest dane dodatkowe
order by PRIVILEGE_TYPE
lub można je podaćorder by 3
. Zwróć uwagę, że trzecia kolumna (PRIVILEGE_TYPE
) została posortowana alfabetycznie.ZDECYDOWANIE długa odpowiedź i dużo przewijania. Trudno mi było również przekazać wyniki zapytań do pliku tekstowego. Oto jak to zrobić bez używania irytującej
into outfile
rzeczy-A kiedy skończysz, zatrzymaj rejestrowanie-
Mam nadzieję, że to dodaje większej jasności.
źródło