[SQL] Optimisation d'une requete

Optimisation d'une requete [SQL] - SQL/NoSQL - Programmation

Marsh Posté le 04-12-2003 à 23:14:52    

Code :
  1. SELECT code_ens, nom_ens
  2. FROM ENSEIGNEMENT E1
  3. WHERE E1.volume_total=(
  4. SELECT MAX(volume_total)
  5. FROM ENSEIGNEMENT E2;


 
Voilà une requete pour afficher le nuplet (code_ens, nom_ens) qui a le volume_total le plus grand ... Cependant cette requete utilise un SELECT imbriqué, est ce possible de le supprimer pour que la requete devienne une requete avec un seul SELECT ..?
 
Merci d'avance !  :hello:  
JardY


Message édité par Profil supprimé le 04-12-2003 à 23:15:10
Reply

Marsh Posté le 04-12-2003 à 23:14:52   

Reply

Marsh Posté le 04-12-2003 à 23:20:24    

c pas optimisable si tu utilise une "fonction" (je ne me rapelle plus le terme exacte pour designer un select max) si je me rappelle bien mes cours de l'an dernier
 
pas de possibilité de "collage" genre E1.x=E2.y dans ce cas

Reply

Marsh Posté le 04-12-2003 à 23:24:22    

Pour bien faire du SQL, faut faire du français :D  
 
Tu ne veux plus le nuplet qui a le volume_total le plus grand, mais plutôt le premier nuplet par ordre décroissant de volume_total :
SELECT code_ens, nom_ens  
FROM ENSEIGNEMENT
ORDER BY volume_total DESC
LIMIT 1

Reply

Marsh Posté le 04-12-2003 à 23:33:23    

nice mrBebert j'aurai compléter mes connaissances en SQL en plus de galérer en C++ aujourd'hui  
merci :D

Reply

Marsh Posté le 04-12-2003 à 23:36:39    

jeoff a écrit :

nice mrBebert j'aurai compléter mes connaissances en SQL en plus de galérer en C++ aujourd'hui  
merci :D

Là, je peux rien faire pour toi :lol:  :whistle:

Reply

Marsh Posté le 04-12-2003 à 23:46:07    

C'est plus astucieux ... c'est sur ! Bien joué !

Reply

Marsh Posté le 04-12-2003 à 23:52:57    

Autre question ...
 
Pour chaque formation, donner le nombre d?heures de cours
(une formation se compose d'enseignements, ces enseignements ont tous un volume_horaire ...)
 
Est ce que cette requete vous parait correcte :
 
SELECT code_formation, nom_formation, somme
FROM FORMATION F, ENSEIGNEMENT E
WHERE F.code_formation=E.code_formation
GROUP BY E.code_formation HAVING SUM(volume_horaire) as somme;

Reply

Marsh Posté le 05-12-2003 à 00:03:33    

Jardy a écrit :

Autre question ...
 
Pour chaque formation, donner le nombre d?heures de cours
(une formation se compose d'enseignements, ces enseignements ont tous un volume_horaire ...)
 
Est ce que cette requete vous parait correcte :
 
SELECT code_formation, nom_formation, somme
FROM FORMATION F, ENSEIGNEMENT E
WHERE F.code_formation=E.code_formation
GROUP BY E.code_formation HAVING SUM(volume_horaire) as somme;


 
non
 
SELECT F.code_formation, F.nom_formation, SUM(volume_horaire)
FROM FORMATION F, ENSEIGNEMENT E
WHERE F.code_formation=E.code_formation
GROUP BY F.code_formation, F.nom_formation
 
 
la clause having permet un filtrage sur les groupes


Message édité par HappyHarry le 05-12-2003 à 00:16:18
Reply

Marsh Posté le 05-12-2003 à 00:12:44    

je me demande si on ne devrait pas mettre plutot
GROUP BY E.code_formation à la place de  
GROUP BY F.code_formation ????

Reply

Marsh Posté le 05-12-2003 à 00:16:54    

faut mettre celui qui est dans ta clause SELECT
(j'ai édité)

Reply

Marsh Posté le 05-12-2003 à 00:16:54   

Reply

Marsh Posté le 05-12-2003 à 00:22:33    

ok merci beaucoup, il se peut que ce post fasse l'objet d'autres questions ... ;)

Reply

Marsh Posté le 05-12-2003 à 00:24:26    

faudrait voir a t'installer un sgbd et a tester par toi meme :o

Reply

Marsh Posté le 05-12-2003 à 00:38:04    

j'en ai un ...

Reply

Marsh Posté le 05-12-2003 à 00:38:20    

je vous fais reflechir un peu ! ;)

Reply

Marsh Posté le 05-12-2003 à 00:43:08    

Jardy a écrit :

je vous fais reflechir un peu ! ;)


 
:sarcastic:

Reply

Marsh Posté le 05-12-2003 à 08:46:47    

Jardy a écrit :

j'en ai un ...  


Lequel ?


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Sujets relatifs:

Leave a Replay

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