Est-il possible de commander lorsque les données proviennent de nombreuses personnes sélectionnées et réunies? Tel que
Select id,name,age
From Student
Where age < 15
Union
Select id,name,age
From Student
Where Name like "%a%"
Comment puis-je commander cette requête par nom.
Certains ont dit que vous pouvez interroger cela.
Select id,name,age
From Student
Where age < 15 or name like "%a%"
Order by name
Mais dans ce cas, j'ignore simplement cette solution.
sql
sql-order-by
union
Guilgamos
la source
la source
Réponses:
Ecrivez
l'ordre par est appliqué au jeu de résultats complet
la source
la source
xxx UNION yyy ORDER BY zzz
l'équivalent de(xxx UNION yyy) ORDER BY zzz
Pour que le tri s'applique uniquement à la première instruction dans UNION, vous pouvez le placer dans une sous-sélection avec UNION ALL (les deux semblent nécessaires dans Oracle):
Ou (répondant au commentaire de Nicholas Carey), vous pouvez garantir que le SELECT supérieur est commandé et les résultats apparaissent au-dessus du SELECT inférieur comme ceci:
la source
select
instruction faisant référence à cette sous-sélection. Selon la norme SQL, l'ordre des résultats n'est pas défini sauf uneorder by
clause explicite . Le premierselect
dans votre exemple renvoie probablement ses résultats dans l'ordre renvoyé par la sous-sélection, mais ce n'est pas garanti. De plus, cela ne garantit * pas * la commande de l'ensemble de résultats de l'ensembleunion
(même règle dans la norme). Si vous dépendez de la commande, vous finirez par vous faire mordre.SELECT
.Les deux autres réponses sont correctes, mais j'ai pensé qu'il valait la peine de noter que l'endroit où je suis resté coincé ne se rendait pas compte que vous aurez besoin de l'ordre par l'alias et assurez-vous que l'alias est le même pour les deux sélections ... donc
notez que j'utilise des guillemets simples dans la première sélection mais des crochets pour les autres.
Vous obtiendrez ainsi le tri dont vous avez besoin.
la source
SELECT a, b, c FROM (<insert union query here>) AS x;
si vous voulez vraiment éviter de renvoyer la colonne supplémentaire.Order By
est appliqué aprèsunion
, il suffit donc d'ajouter uneorder by
clause à la fin des instructions:la source
Si je veux que le tri soit appliqué à un seul de l'UNION si vous utilisez Union all:
la source
Comme d'autres réponses l'ont indiqué, «Trier par» après LAST Union devrait s'appliquer aux deux ensembles de données joints par union.
J'avais deux ensembles de données mais j'utilisais des tables différentes mais les mêmes colonnes. «Commander avant» après que LAST Union n'ait pas encore fonctionné. L'utilisation d'ALIAS pour la colonne utilisée dans l'ordre par a fait l'affaire.
La solution consiste donc à utiliser l'alias 'User_Name':
la source
Peut utiliser ceci:
la source