web-dev-qa-db-fra.com

Quel est l'objectif de l'instruction Order By 1 dans l'instruction select SQL?

Je lis un code ancien au travail et j'ai remarqué qu'il y a plusieurs vues avec un 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;
131
echo

Cette:

ORDER BY 1

... est appelé "Ordinal" - le nombre 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, car:

  1. Ce n'est pas évident/explicite
  2. Si l'ordre des colonnes change, la requête est toujours valide, vous risquez donc d'ordonner quelque chose que vous n'aviez pas prévu
169
OMG Ponies

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

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

Je crois en Oracle cela signifie ordre par colonne # 1

7
Christoph

Cela va trier vos résultats par la première colonne retournée. Dans l'exemple, il sera trié par date_paiement.

6
CTKeane

cela signifie simplement trier la vue ou le tableau par la 1ère colonne du résultat de la requête.

5
kshitij

Comme mentionné dans d'autres réponses ORDER BY 1 ordres par la première colonne.

Je suis tombé sur un autre exemple d'utilisation de ce produit. Nous avons certaines requêtes qui doivent être commandées, sélectionnez la même colonne. Vous obtiendrez une erreur SQL si vous commandez par Name ci-dessous.

SELECT Name, Name FROM Segment ORDER BY 1
3
nicV