OVH Cloud OVH Cloud

question avec union

17 réponses
Avatar
jeorme
Bonjour à tous

Question pour les pro de SQL:

J'ai 50 élèves avec leur moyenne, je veux une requete dans laquelle j'ai les
10 meilleurs et les dix plus mauvais.

Ex:

select top 10 nom, moyenne
from notes
order by moyenne desc



select top 10 nom, moyenne
from notes
order by moyenne

Si je m'ai une union ça foire à cause des order by.

Que faire ?

10 réponses

1 2
Avatar
Evariste
Si tu ne peux pas le faire en une fois, passe par une table temportaire
phase 1 :
Select top 10 nom, moyenne into #matabletemp from matable order by moyenne
phase 2
Insert #matabletemp (nom, moyenne) select top 10 nom,moyenne from matable
order by moyenne desc

Et enfin

Select nom,moyenn from #matabletemp order by moyenne
Dans un union, le order porte sur l'uion meme et pas sous ls sous ensemble.

"jeorme" a écrit :

Bonjour à tous

Question pour les pro de SQL:

J'ai 50 élèves avec leur moyenne, je veux une requete dans laquelle j'ai les
10 meilleurs et les dix plus mauvais.

Ex:

select top 10 nom, moyenne
from notes
order by moyenne desc



select top 10 nom, moyenne
from notes
order by moyenne

Si je m'ai une union ça foire à cause des order by.

Que faire ?





Avatar
Philippe T [MS]
Bonjour,



Phil.
________________________________________________________
Philippe TROTIN http://blogs.msdn.com/ptrotin
Microsoft Services France http://www.microsoft.com/france

"jeorme" wrote in message
news:
Bonjour à tous

Question pour les pro de SQL:

J'ai 50 élèves avec leur moyenne, je veux une requete dans laquelle j'ai


les
10 meilleurs et les dix plus mauvais.

Ex:

select top 10 nom, moyenne
from notes
order by moyenne desc



select top 10 nom, moyenne
from notes
order by moyenne

Si je m'ai une union ça foire à cause des order by.

Que faire ?




Avatar
Philippe T [MS]
Bonjour,

Quelque chose comme cela ?

SELECT nom, moyenne FROM (select top 10 nom, moyenne from notes order by
moyenne desc)
UNION
SELECT nom, moyenne FROM (select top 10 nom, moyenne from notes order by
moyenne)

Phil.
________________________________________________________
Philippe TROTIN http://blogs.msdn.com/ptrotin
Microsoft Services France http://www.microsoft.com/france

"jeorme" wrote in message
news:
Bonjour à tous

Question pour les pro de SQL:

J'ai 50 élèves avec leur moyenne, je veux une requete dans laquelle j'ai


les
10 meilleurs et les dix plus mauvais.

Ex:

select top 10 nom, moyenne
from notes
order by moyenne desc



select top 10 nom, moyenne
from notes
order by moyenne

Si je m'ai une union ça foire à cause des order by.

Que faire ?




Avatar
Fred BROUARD
select top 10 nom, moyenne, '1 : les meilleurs' AS NOTATION
from notes
UNION
select top 10 nom, moyenne, '2 : les plus mauvais'
from notes
order by NOTATION ASC, moyenne DESC

A +

--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************

jeorme a écrit:
Bonjour à tous

Question pour les pro de SQL:

J'ai 50 élèves avec leur moyenne, je veux une requete dans laquelle j'ai les
10 meilleurs et les dix plus mauvais.

Ex:

select top 10 nom, moyenne
from notes
order by moyenne desc



select top 10 nom, moyenne
from notes
order by moyenne

Si je m'ai une union ça foire à cause des order by.

Que faire ?




Avatar
Philippe T [MS]
Bonjour,

Oui, cela marche aussi !!! :-)

Phil.
________________________________________________________
Philippe TROTIN http://blogs.msdn.com/ptrotin
Microsoft Services France http://www.microsoft.com/france

"Fred BROUARD" wrote in message
news:
select top 10 nom, moyenne, '1 : les meilleurs' AS NOTATION
from notes
UNION
select top 10 nom, moyenne, '2 : les plus mauvais'
from notes
order by NOTATION ASC, moyenne DESC

A +

--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************

jeorme a écrit:
> Bonjour à tous
>
> Question pour les pro de SQL:
>
> J'ai 50 élèves avec leur moyenne, je veux une requete dans laquelle j'ai


les
> 10 meilleurs et les dix plus mauvais.
>
> Ex:
>
> select top 10 nom, moyenne
> from notes
> order by moyenne desc
>
>
>
> select top 10 nom, moyenne
> from notes
> order by moyenne
>
> Si je m'ai une union ça foire à cause des order by.
>
> Que faire ?
>
>




Avatar
Med Bouchenafa
Je ne pense que la solution de Fred puisse marcher
Sinon Jeorme n'aurait pas poser la question !!!
Comme l'a bien fait remarquer Evariste, l'ORDER BY porte sur l'ensemble du
jeu de résultat après le regroupement par Union
Le passage par une table temporaire est une solution tout à fait acceptable.
Ce que tu as proposé fonctionne aussi à condition de lui rajouter un ORDER
BY sur l'ensemble
Attention à la gestion des doublons (deux elèves ayant la même note)

--
Bien cordialement
Med Bouchenafa

"Philippe T [MS]" a écrit dans le message de
news: %
Bonjour,

Oui, cela marche aussi !!! :-)

Phil.
________________________________________________________
Philippe TROTIN http://blogs.msdn.com/ptrotin
Microsoft Services France http://www.microsoft.com/france

"Fred BROUARD" wrote in message
news:
select top 10 nom, moyenne, '1 : les meilleurs' AS NOTATION
from notes
UNION
select top 10 nom, moyenne, '2 : les plus mauvais'
from notes
order by NOTATION ASC, moyenne DESC

A +

--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************

jeorme a écrit:
> Bonjour à tous
>
> Question pour les pro de SQL:
>
> J'ai 50 élèves avec leur moyenne, je veux une requete dans laquelle
> j'ai


les
> 10 meilleurs et les dix plus mauvais.
>
> Ex:
>
> select top 10 nom, moyenne
> from notes
> order by moyenne desc
>
>
>
> select top 10 nom, moyenne
> from notes
> order by moyenne
>
> Si je m'ai une union ça foire à cause des order by.
>
> Que faire ?
>
>








Avatar
jeorme
en fait comme il n'y que la solution des tables tempo qui permet de classer
dans cette ordre , j'ai fait différement.

J'ai pris la solution de philippe qui me remonte les 10 meilleurs et les 10
plus maivais dans n'importe quel ordre. J'envoie ça dans ma pages ASP un
tableau qu'on trie et j'affiche et ça roule.

Merci à tous pour votre aide.

PS: je pensais que ce problème serait simple à gérer par du sql mais comme
quoi !!!

"Med Bouchenafa" a écrit dans le message de news:
#
Je ne pense que la solution de Fred puisse marcher
Sinon Jeorme n'aurait pas poser la question !!!
Comme l'a bien fait remarquer Evariste, l'ORDER BY porte sur l'ensemble du
jeu de résultat après le regroupement par Union
Le passage par une table temporaire est une solution tout à fait


acceptable.
Ce que tu as proposé fonctionne aussi à condition de lui rajouter un ORDER
BY sur l'ensemble
Attention à la gestion des doublons (deux elèves ayant la même note)

--
Bien cordialement
Med Bouchenafa

"Philippe T [MS]" a écrit dans le message


de
news: %
> Bonjour,
>
> Oui, cela marche aussi !!! :-)
>
> Phil.
> ________________________________________________________
> Philippe TROTIN http://blogs.msdn.com/ptrotin
> Microsoft Services France http://www.microsoft.com/france
>
> "Fred BROUARD" wrote in message
> news:
>> select top 10 nom, moyenne, '1 : les meilleurs' AS NOTATION
>> from notes
>> UNION
>> select top 10 nom, moyenne, '2 : les plus mauvais'
>> from notes
>> order by NOTATION ASC, moyenne DESC
>>
>> A +
>>
>> --
>> Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web
>> Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
>> Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
>> ************************ www.datasapiens.com *************************
>>
>> jeorme a écrit:
>> > Bonjour à tous
>> >
>> > Question pour les pro de SQL:
>> >
>> > J'ai 50 élèves avec leur moyenne, je veux une requete dans laquelle
>> > j'ai
> les
>> > 10 meilleurs et les dix plus mauvais.
>> >
>> > Ex:
>> >
>> > select top 10 nom, moyenne
>> > from notes
>> > order by moyenne desc
>> >
>> >
>> >
>> > select top 10 nom, moyenne
>> > from notes
>> > order by moyenne
>> >
>> > Si je m'ai une union ça foire à cause des order by.
>> >
>> > Que faire ?
>> >
>> >
>>
>>
>
>




Avatar
jgabillaud
100% d'accord avec toi, la requête ne fonctionne pas car il n'est pas
possible de faire appariatre la même colonne 2 fois dans l'order by.
De plus les meilleurs possèdent une moyenne élevée, pour obtebir les 10
meilleurs il faut trier les moyennes en ordre décroissant DESC, et pour les
plus mauvais il faut trier par ordre croissant



"Med Bouchenafa" a écrit :

Je ne pense que la solution de Fred puisse marcher
Sinon Jeorme n'aurait pas poser la question !!!
Comme l'a bien fait remarquer Evariste, l'ORDER BY porte sur l'ensemble du
jeu de résultat après le regroupement par Union
Le passage par une table temporaire est une solution tout à fait acceptable.
Ce que tu as proposé fonctionne aussi à condition de lui rajouter un ORDER
BY sur l'ensemble
Attention à la gestion des doublons (deux elèves ayant la même note)

--
Bien cordialement
Med Bouchenafa

"Philippe T [MS]" a écrit dans le message de
news: %
> Bonjour,
>
> Oui, cela marche aussi !!! :-)
>
> Phil.
> ________________________________________________________
> Philippe TROTIN http://blogs.msdn.com/ptrotin
> Microsoft Services France http://www.microsoft.com/france
>
> "Fred BROUARD" wrote in message
> news:
>> select top 10 nom, moyenne, '1 : les meilleurs' AS NOTATION
>> from notes
>> UNION
>> select top 10 nom, moyenne, '2 : les plus mauvais'
>> from notes
>> order by NOTATION ASC, moyenne DESC
>>
>> A +
>>
>> --
>> Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web
>> Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
>> Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
>> ************************ www.datasapiens.com *************************
>>
>> jeorme a écrit:
>> > Bonjour à tous
>> >
>> > Question pour les pro de SQL:
>> >
>> > J'ai 50 élèves avec leur moyenne, je veux une requete dans laquelle
>> > j'ai
> les
>> > 10 meilleurs et les dix plus mauvais.
>> >
>> > Ex:
>> >
>> > select top 10 nom, moyenne
>> > from notes
>> > order by moyenne desc
>> >
>> >
>> >
>> > select top 10 nom, moyenne
>> > from notes
>> > order by moyenne
>> >
>> > Si je m'ai une union ça foire à cause des order by.
>> >
>> > Que faire ?
>> >
>> >
>>
>>
>
>





Avatar
bruno reiter [MVP]
select A.au_id, A.au_lname, 'prems'
from
(
select top 10 * from authors
order by au_lname
) as a
union all
select A.au_id, A.au_lname,'derch'
from
(
select top 10 * from authors
order by au_lname desc
) as a
order by 2

br

"jeorme" wrote in message
news:
Bonjour à tous

Question pour les pro de SQL:

J'ai 50 élèves avec leur moyenne, je veux une requete dans laquelle j'ai


les
10 meilleurs et les dix plus mauvais.

Ex:

select top 10 nom, moyenne
from notes
order by moyenne desc



select top 10 nom, moyenne
from notes
order by moyenne

Si je m'ai une union ça foire à cause des order by.

Que faire ?




Avatar
jeorme
désolé mais ça marche pas on ne peut pas mettre de order by dans un select
d'un select
"bruno reiter [MVP]" <remove.this! a écrit dans le message
de news:
select A.au_id, A.au_lname, 'prems'
from
(
select top 10 * from authors
order by au_lname
) as a
union all
select A.au_id, A.au_lname,'derch'
from
(
select top 10 * from authors
order by au_lname desc
) as a
order by 2

br

"jeorme" wrote in message
news:
> Bonjour à tous
>
> Question pour les pro de SQL:
>
> J'ai 50 élèves avec leur moyenne, je veux une requete dans laquelle j'ai
les
> 10 meilleurs et les dix plus mauvais.
>
> Ex:
>
> select top 10 nom, moyenne
> from notes
> order by moyenne desc
>
>
>
> select top 10 nom, moyenne
> from notes
> order by moyenne
>
> Si je m'ai une union ça foire à cause des order by.
>
> Que faire ?
>
>




1 2