Ich lese gerade alten Code bei der Arbeit durch und habe festgestellt, dass es mehrere Ansichten mit einer order by 1
Klausel gibt. Was bringt das?
Beispiel:
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
quelle
quelle
ORDER BY
in einem zu habenVIEW
. Standard SQL erlaubt es nicht. SQL Server hat es seit 2005 verboten. Bei SQL-Implementierungen, die dies zulassen, ist das Verhalten weitgehend undokumentiert und kontraintuitiv. Mit anderen Worten, auf jeden Fall zu vermeiden.TOP
vorhanden, und SSMS fügt gerne hinzuTOP 100 PERCENT
.CHECK
Einschränkung in a,CREATE TABLE
aber es berücksichtigt sie nicht wirklich - es wird nie wirklich überprüft! Die Frage ist, haben diese SQL - Produkte immer ehren dieORDER BY
in Aussicht zB wenn in einer Abfrage verwendet , dass auch eineORDER BY
nicht zweimal sortiert werden? Dokumentieren sie überhaupt das Verhalten oder müssen Sie die Ausführungspläne überprüfen, um es auszuarbeiten? Ich denke, wir kennen die Antworten;)ORDER BY 1
... mithilfe eines Cross-Apply-Tricks entdeckt, bei dem Sie einen leeren Alias wünschen. Leider ist der Code zB zu groß für einen Kommentar, daher habe ich ihn als Antwort unter FYI gepostet.Antworten:
Dies:
... wird als "Ordnungszahl" bezeichnet - die Zahl steht für die Spalte basierend auf der Anzahl der in der SELECT-Klausel definierten Spalten. In der von Ihnen angegebenen Abfrage bedeutet dies:
Es ist keine empfohlene Praxis, weil:
quelle
sql
Tag. In Standard SQL sind in derOREDER BY
Klausel nur Spaltenkorrelationsnamen zulässig , da die Tabellenkorrelationsnamen theoretisch außerhalb des Gültigkeitsbereichs liegen, dh solltenORDER BY PAYMENT_DATE;
. Natürlich entsprechen nicht alle SQL-Implementierungen den Standards.;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
Dies ist nützlich, wenn Sie satzbasierte Operatoren verwenden, z. B. union
quelle
order by tablea.cola
Es bedeutet einfach, die Ansicht oder Tabelle nach der ersten Spalte des Abfrageergebnisses zu sortieren.
quelle
Ich glaube an Oracle, es bedeutet Reihenfolge nach Spalte 1
quelle
Dadurch werden Ihre Ergebnisse nach der ersten zurückgegebenen Spalte sortiert. Im Beispiel wird nach Zahlungsdatum sortiert.
quelle
Wie in anderen Antworten erwähnt, wird in
ORDER BY 1
der ersten Spalte geordnet.Ich bin auf ein anderes Beispiel gestoßen, wo Sie es verwenden könnten. Wir haben bestimmte Fragen, die bestellt werden müssen, wählen Sie die gleiche Spalte. Sie würden einen SQL-Fehler erhalten, wenn Sie nach
Name
unten bestellen .quelle
Siehe auch:
http://www.techonthenet.com/sql/order_by.php
Für eine Beschreibung der Bestellung von. Ich habe etwas gelernt! :) :)
Ich habe dies auch in der Vergangenheit verwendet, als ich einer SQL-Anweisung eine unbestimmte Anzahl von Filtern hinzufügen wollte. Schlampig weiß ich, aber es hat funktioniert. : P.
quelle
Ein Beispiel hier aus einer Beispieltest-WAMP-Serverdatenbank: -
Und wenn es zusätzlich gegeben wird
order by PRIVILEGE_TYPE
oder gegeben werden kannorder by 3
. Beachten Sie, dass die 3. Spalte (PRIVILEGE_TYPE
) alphabetisch sortiert wird.ENDGÜLTIG, eine lange Antwort und viel Scrollen. Außerdem hatte ich große Mühe, die Ausgabe der Abfragen an eine Textdatei zu übergeben. Hier
into outfile
erfahren Sie, wie Sie dies tun können, ohne das nervige Ding zu verwenden.Und wenn Sie fertig sind, stoppen Sie die Protokollierung.
Hoffe, es fügt mehr Klarheit hinzu.
quelle