[SQL] requete (optimisation toute simple help!!!!)

requete (optimisation toute simple help!!!!) [SQL] - SQL/NoSQL - Programmation

Marsh Posté le 18-07-2003 à 00:30:12    

voila je voudrait recuperer la personne qui a le plus de medaille ainsi que son nom
 
la table est comme ceci
 

Code :
  1. medail(noevent,name,type)
  2. SQL> select * from medail;
  3.    NOEVENT NAME                           TYPE
  4. ---------- ------------------------------ ----------
  5.          1 Carl Lewis                     Or
  6.          2 Carl Lewis                     Argent
  7.          5 Carl Lewis                     Or
  8.          5 P2                             Platine
  9.          7 P4                             Argent
  10.          6 P4                             Or


j'ai dabord fait ca :
 
select max(count(*)) from medail group by name;  
 
qui me sort  
 

Code :
  1. MAX(COUNT(*))
  2. -------------
  3.             3


 
je souhaite egalement afficher le nom et jai essaye
 

Code :
  1. select name,max(count(*)) from medail group by name;


mais c pas bon  :(  
 
alors jai fait ca  
 

Code :
  1. select name from medail group by name having count(*)=(select max(count(*)) from medail group by name);


ya pas moyen de faire plus simple ?????

Reply

Marsh Posté le 18-07-2003 à 00:30:12   

Reply

Marsh Posté le 18-07-2003 à 08:47:04    

non je pesne pas qu'il y ait moyen de faire plus simple. C'est la solution qui avait ete donnee a une autre personne qui se posait la meme question que toi.
 
http://forum.hardware.fr/forum2.ph [...] h=&subcat=


Message édité par polo021 le 18-07-2003 à 08:49:57
Reply

Marsh Posté le 18-07-2003 à 11:38:35    

Reply

Marsh Posté le 18-07-2003 à 20:05:32    

Sinon, plus simple :sarcastic:
 
select count(noevent) nbMedails, name
from medail
group by name
order by nbMedails
 
Et tu récupères que la première ligne (soit en SQL avec un limit, soit depuis le code du programme qui éxécute la requête)
 
L'avantage, c'est que tu peux aussi récupérer le top x, ce qui est pas mal...


Message édité par MagicBuzz le 18-07-2003 à 20:07:01
Reply

Marsh Posté le 19-07-2003 à 04:29:32    

MagicBuzz a écrit :

Sinon, plus simple :sarcastic:
 
select count(noevent) nbMedails, name
from medail
group by name
order by nbMedails
 
Et tu récupères que la première ligne (soit en SQL avec un limit, soit depuis le code du programme qui éxécute la requête)
 
L'avantage, c'est que tu peux aussi récupérer le top x, ce qui est pas mal...


 
en tout k merci pour toutes ces reponses  
 
en fait jdoit lecrire en une seule ligne (cest une partie de lexamen de juin 2003 que jai pas trop maitrisé  :whistle: )

Reply

Marsh Posté le 19-07-2003 à 05:27:35    

ben tu fait bêtement un limit sur le requête que j'ai posté, c'est pas plus compliqué que ça.
 
exam de koi ?


Message édité par MagicBuzz le 19-07-2003 à 05:27:54
Reply

Marsh Posté le 19-07-2003 à 09:53:32    

MagicBuzz a écrit :

ben tu fait bêtement un limit sur le requête que j'ai posté, c'est pas plus compliqué que ça.
 
exam de koi ?


examen du cours de SGBD je pense


Message édité par polo021 le 19-07-2003 à 09:53:53
Reply

Marsh Posté le 19-07-2003 à 13:29:50    

polo021 a écrit :


examen du cours de SGBD je pense


ouais nan ça je me doute que c'est pas des cours d'espagnol...
 
je parle du niveau...
 
BTS, DUT, DEUG, LICENCE, INGE ?
 
Parceque je trouve ça super trivial comme truc, pour un TP, ok, mais pour un exam, je suis un peu étonné.

Reply

Marsh Posté le 19-07-2003 à 13:43:42    

bac+3, une partie de l'exam de 2eme année.

Reply

Marsh Posté le 19-07-2003 à 13:46:23    

ok. c'est une formation d'info, ou si l'info est une matière "satellite" ?

Reply

Marsh Posté le 19-07-2003 à 13:46:23   

Reply

Marsh Posté le 19-07-2003 à 13:47:44    

c'est une formation de base sur l'analyse / programation.

Reply

Marsh Posté le 19-07-2003 à 14:11:48    

ok, bah je trouve ça chelou :D
 
quand j'ai fait mon dut, j'ai souvenir que c'était bien plus corsé :)
 
et plus récement, j'ai fait une formation oracle (formation SQL et PL/SQL) - qu'est-ce que je me suis emmerdé ! - qui a duré 3 jours pour le SQL et 2 pour le PL/SQL, et dès la première après-midi de SQL on faisait des trucs plus complexes
 
bon, d'un autre côté, entre une formation dont les cours durent toute la journée et une école où les cours durent 1 à 2 heures et sont dispersés dans l'année, la vitesse change beaucoup, m'enfin...
 
 
Par exemple, exercice 14 (les exos de 1 à 12 se font en 10 minutes, c'est juste pour apprendre à faire un order et un where)
 
"Afficher les informations du service ayant le plus d'employés ; son numéro, son nom, le continent où il se trouve, et le nombre d'employés y travailant"
 
C'est rigoureusement le même type de problème, mais avec des jointures histoire de compliquer un minimum.

Reply

Marsh Posté le 19-07-2003 à 15:01:29    

donc si c pour un examen il doit etre aux normes donc interdit les limit et autre numrow :-)

Reply

Marsh Posté le 19-07-2003 à 15:06:31    

ben alors tu utilise "top" qui est la norme.
 
sinon, bah tu fais avec un having, c'est le seul autre moyen.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed