176 votes

Quel est le but de l'ordre par 1 dans l'instruction SQL select ?

Je suis en train de lire un vieux code au travail, et j'ai remarqué qu'il y a plusieurs vues avec une balise order by 1 clause. Qu'est-ce que cela accomplit ?

Exemple :

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;

6 votes

Pour information : il est généralement considéré comme une mauvaise pratique d'avoir un ORDER BY dans les vues, à moins que vous puissiez garantir que la vue ne sera jamais utilisée que pour la présentation. C'est un gaspillage parce que le ORDER BY se produira 2x si vous utilisez la vue dans une autre requête avec un ORDER BY.

3 votes

@OMG Ponies : il est généralement considéré comme illégal d'avoir un ORDER BY dans un VIEW . Le SQL standard ne le permet pas. SQL Server l'a interdit depuis 2005. Pour les implémentations SQL qui l'autorisent, le comportement est largement non documenté et contre intuitif. En d'autres termes, il faut absolument l'éviter.

0 votes

@onedaywhen : Tu prêches un convaincu, mais MySQL permet ORDER BY dans les vues comme le fait Oracle IME. Le serveur SQL autorise un ORDER BY si TOP est présent, et SSMS aime ajouter TOP 100 PERCENT .

233voto

OMG Ponies Points 144785

Ceci :

ORDER BY 1

...est connu sous le nom de "Ordinal" - le numéro représente la colonne en fonction du nombre de colonnes défini dans la clause SELECT. Dans la requête que vous avez fournie, cela signifie :

ORDER BY A.PAYMENT_DATE

Ce n'est pas une pratique recommandée, parce que :

  1. Ce n'est pas évident/explicite.
  2. Si l'ordre des colonnes change, la requête reste valide et vous risquez de classer les colonnes selon un ordre que vous n'aviez pas prévu.

1 votes

Ma question était de savoir s'il y avait un avantage à utiliser les Ordinaux : stackoverflow.com/questions/2253040/

0 votes

Ceci n'a que le sql tag. En SQL standard, seuls les noms de corrélation de colonnes sont autorisés dans la balise OREDER BY car, en théorie, les noms de corrélation de la table sont hors de portée, c'est-à-dire qu'ils doivent être ORDER BY PAYMENT_DATE; . Bien entendu, toutes les implémentations SQL ne sont pas conformes aux normes.

0 votes

Testé et fonctionnant dans SQL Server ;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

42voto

daven11 Points 1430

Ceci est utile lorsque vous utilisez des opérateurs basés sur des ensembles, par exemple l'union.

select cola
  from tablea
union
select colb
  from tableb
order by 1;

6 votes

Aha, ça a du sens. C'est la première bonne raison que j'ai vue jusqu'à présent.

4 votes

@Lazer Je ne crois pas, pour effectuer une union, il fait probablement un tri interne, mais c'est une question d'implémentation par opposition à une question de sortie logique et dans l'esprit de SQL il n'y a pas besoin de sortir les lignes dans l'ordre. Et que se passe-t-il si vous souhaitez effectuer un tri décroissant ? On en revient alors au problème initial.

3 votes

Quand même... Je préférerais utiliser order by tablea.cola

7voto

Je crois qu'en Oracle, cela signifie ordonner par la colonne 1.

7voto

CTKeane Points 530

Cela permettra de trier vos résultats en fonction de la première colonne retournée. Dans l'exemple, elle triera par date de paiement.

0voto

kdmurray Points 1524

Voir aussi :

http://www.techonthenet.com/sql/order_by.php

Pour une description de la commande par. J'ai appris quelque chose ! :)

Je l'ai également utilisé dans le passé lorsque je voulais ajouter un nombre indéterminé de filtres à une instruction sql. Je sais que c'est peu soigné, mais ça a fonctionné :P

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X