Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1725 connectés 

 


 Mot :   Pseudo :  
 
 Page :   1  2  3  4  5
Page Suivante
Auteur Sujet :

Projet SQL

n°1560001
MagicBuzz
Posté le 14-05-2007 à 12:10:15  profilanswer
 

Reprise du message précédent :
oui, avg s'utilise comme ça.
par contre ça marche comme le MIN/MAX/COUNT/SUM : faut mettre des group by si tu retournes d'autres champs

mood
Publicité
Posté le 14-05-2007 à 12:10:15  profilanswer
 

n°1560036
lumi
Posté le 14-05-2007 à 13:04:57  profilanswer
 

MagicBuzz a écrit :

oui, avg s'utilise comme ça.
par contre ça marche comme le MIN/MAX/COUNT/SUM : faut mettre des group by si tu retournes d'autres champs

 


ok merci

 

j'ai justement un max a utiliser pour la date de la derniere commande

 

select max(date_ordonnance) from ordonnance;


Message édité par lumi le 14-05-2007 à 13:07:52

---------------

n°1560040
lumi
Posté le 14-05-2007 à 13:14:33  profilanswer
 

le cout totale de la commande numero021015-05

 

select sum(prix_examen) from examen as e, ordonnance as o, commande as co where co.num_commande='021015-15' and co.code_ordonnance=o.code_ordonnance and e.code_examen=o.code_examen;

  

sauf que je trouve 35 alors que je devrai trouver 130 :(

 

edit : forcmeent si je remplace 05 par 15 [:spamafote]


Message édité par lumi le 14-05-2007 à 13:51:34

---------------

n°1560043
lumi
Posté le 14-05-2007 à 13:19:00  profilanswer
 

 

le nom de chaque service et le delai moyen d'attente pour un examen dans ce service

 


select s.nom_service, avg(e.delai) from service as s, examen as e where e.code_service=s.code_service group by s.nom_service;

 


Message édité par lumi le 14-05-2007 à 13:27:10

---------------

n°1560087
lumi
Posté le 14-05-2007 à 14:06:19  profilanswer
 

il me reste l'histoire du UNION a regler

 

et les trois dernieres, a savoir :

 

1) affichez le nom et le delai moyen de livraison, des services dont le delai est superieure a la moyenne

 

2) calculez le nombre de commande qui n'ont qu'un seul examen

 

3) et la derniere qui meme en francais est incomprehensible

  


jpensais faire ca pour la 1)

 

select distinct s.nom_service, avg(e.delai)
    -> from service as s, examen as e
    -> where e.delai > avg(e.delai)
    -> and e.code_service=s.code_service
    -> group by nom_service
    -> ;

 


mais ca marche pas............

  

stop pour cette aprem

 

si je trouve les derniere et le union tant mieu sinon j enverrai comme ca


Message édité par lumi le 14-05-2007 à 14:15:11

---------------

n°1560106
gocho
Posté le 14-05-2007 à 14:24:51  profilanswer
 

il me semble, si mes souvenirs sont bons, que tu ne peux pas mettre une fonction d'agregats/calcul dans la clause where.
Il faut que tu la mette dans having
 
donc il me semble que ca donnera  
 
select distinct s.nom_service, avg(e.delai)
    -> from service as s, examen as e
    -> where e.code_service=s.code_service
    -> having (e.delai > avg(e.delai))
    -> group by nom_service;
 
 

n°1560114
MagicBuzz
Posté le 14-05-2007 à 14:33:34  profilanswer
 

ça marchera pas non plus, e.delai n'est pas accessible dans le having, et ça répond pas à la question ;)
 

Code :
  1. SELECT
  2. s.nom_service,
  3. avg(e1.delai),
  4. avg(e2.delai)
  5. FROM service s INNER JOIN examen e1 ON e1.code_service = s.code_service
  6. CROSS JOIN examen e2 -- cross join permet de faire un produit cartésien car on veut tous les examen
  7. GROUP BY s.nom_service
  8. HAVING avg(e1.delai) > avg(e2.delai)


 
Je *crois* que ça devrait marcher. A vérifier.
 
Au pire ceci devrait marcher (sous SQL Server 2005 en tout cas ça marche) :
 

Code :
  1. SELECT
  2. s.nom_service,
  3. avg(e1.delai)
  4. FROM service s INNER JOIN examen e1 ON e1.code_service = s.code_service
  5. GROUP BY s.nom_service
  6. HAVING avg(e1.delai) > (SELECT avg(e2.delai) FROM examen e2)

n°1560151
gocho
Posté le 14-05-2007 à 15:06:55  profilanswer
 

c'est pas juste le delai de la ligne qui doit etre superieur a la moyenne?  
 
parce que, la moyenne superieur a elle meme, ne risque pas de retourner grand chose  [:cupra]
 
 
edit : a moins qu'une subtilité m'echappe [:spamafote]

Message cité 1 fois
Message édité par gocho le 14-05-2007 à 15:07:26
n°1560183
MagicBuzz
Posté le 14-05-2007 à 15:28:46  profilanswer
 

gocho a écrit :

c'est pas juste le delai de la ligne qui doit etre superieur a la moyenne?  
 
parce que, la moyenne superieur a elle meme, ne risque pas de retourner grand chose  [:cupra]
 
 
edit : a moins qu'une subtilité m'echappe [:spamafote]


nan, le délais moyen du service donné suppérieur au délais moyen de tous les services.
 
genre j'ai 3 services avec à chaque fois 3 livraisons :
 
avg sur les livraisons regroupés par examen
Radiologie : délai: 2 jours ; délai: 1 jours ; délai: 3 jours => délai moyen 2 jours
Biopsie : délai: 7 jours ; délai: 5 jours ; délai: 6 jours => délai moyen 6 jours
IRM : délai: 6 jours ; délai: 7 jours ; délai: 8 jours => délai moyen 7 jours
---------------
avg du délais de toutes les livraison, sans regroupement
Délais moyen : 5 jours  
 
Donc tu dois sortir "Biopsie" et "IRM"
=> C'est du moins comme ça que je comprends l'énnoncé

Message cité 1 fois
Message édité par MagicBuzz le 14-05-2007 à 15:32:03
n°1560185
MagicBuzz
Posté le 14-05-2007 à 15:29:40  profilanswer
 

(ceci dit, j'ai pas pigé pkoi tu as un délai au niveau du service. c'est pas plutôt dans la livraison que tu vas le trouver le délai ?)

Message cité 1 fois
Message édité par MagicBuzz le 14-05-2007 à 15:30:02
mood
Publicité
Posté le 14-05-2007 à 15:29:40  profilanswer
 

n°1560414
lumi
Posté le 14-05-2007 à 20:19:32  profilanswer
 

inner join et on j'ai jamais vu et pas evoqué en cours donc....


---------------

n°1560416
lumi
Posté le 14-05-2007 à 20:21:24  profilanswer
 

MagicBuzz a écrit :

nan, le délais moyen du service donné suppérieur au délais moyen de tous les services.
 
genre j'ai 3 services avec à chaque fois 3 livraisons :
 
avg sur les livraisons regroupés par examen
Radiologie : délai: 2 jours ; délai: 1 jours ; délai: 3 jours => délai moyen 2 jours
Biopsie : délai: 7 jours ; délai: 5 jours ; délai: 6 jours => délai moyen 6 jours
IRM : délai: 6 jours ; délai: 7 jours ; délai: 8 jours => délai moyen 7 jours
---------------
avg du délais de toutes les livraison, sans regroupement
Délais moyen : 5 jours  
 
Donc tu dois sortir "Biopsie" et "IRM"
=> C'est du moins comme ça que je comprends l'énnoncé


 
 
oui c'est exactement ce que je pensais


---------------

n°1560417
lumi
Posté le 14-05-2007 à 20:21:59  profilanswer
 

MagicBuzz a écrit :

(ceci dit, j'ai pas pigé pkoi tu as un délai au niveau du service. c'est pas plutôt dans la livraison que tu vas le trouver le délai ?)

 


oui c'est dans la livraison du service

   

calculez le nombre de commande qui ne compte qu'un seul examen

 

celle la doit pas etre trop compliquée non plus, mais il faut utiliser count pour le nombre de commande

 

mais il faut utiliser aussi qq chose pour compter qu'il ny a qu'un seul examen


Message édité par lumi le 14-05-2007 à 20:25:03

---------------

n°1560488
gocho
Posté le 15-05-2007 à 10:12:45  profilanswer
 

me semble que lorsque tu veux verifier le resultat d'un count dans ta requete, tu dois utiliser having
 
 
select mon_champ
from ma_table
having (count (deuxieme_champ) > 12)
 
 
enfin, un truc dans le genre je crois.

n°1560503
MagicBuzz
Posté le 15-05-2007 à 10:37:13  profilanswer
 

apparement, vu que le nombre d'éléments et le nombre de commandes nécessitent un regroupement différent, je pense qu'on doit obligatoirement passer par une sous-requête.
 
à partir de là, on a le choix entre faire un HAVING dans la sous-requête, ou un WHERE dans la requête principale sur le count retourné par la sous-requête.

n°1560633
lumi
Posté le 15-05-2007 à 12:46:14  profilanswer
 

De retour \o/


---------------

n°1560644
lumi
Posté le 15-05-2007 à 13:05:46  profilanswer
 

MagicBuzz a écrit :

ça marchera pas non plus, e.delai n'est pas accessible dans le having, et ça répond pas à la question ;)
 

Code :
  1. SELECT
  2. s.nom_service,
  3. avg(e1.delai),
  4. avg(e2.delai)
  5. FROM service s INNER JOIN examen e1 ON e1.code_service = s.code_service
  6. CROSS JOIN examen e2 -- cross join permet de faire un produit cartésien car on veut tous les examen
  7. GROUP BY s.nom_service
  8. HAVING avg(e1.delai) > avg(e2.delai)


 
Je *crois* que ça devrait marcher. A vérifier.
 
Au pire ceci devrait marcher (sous SQL Server 2005 en tout cas ça marche) :
 

Code :
  1. SELECT
  2. s.nom_service,
  3. avg(e1.delai)
  4. FROM service s INNER JOIN examen e1 ON e1.code_service = s.code_service
  5. GROUP BY s.nom_service
  6. HAVING avg(e1.delai) > (SELECT avg(e2.delai) FROM examen e2)



 
une autre soluce en utilisant autre chose que "inner join" et "on"


---------------

n°1560729
MagicBuzz
Posté le 15-05-2007 à 16:00:27  profilanswer
 

euh... remplacer "INNER JOIN" par ","
suprimer le "ON"
et coller ce qui suit le "ON" dans la clause where ?
 
parceque à la base, c'est une jointure régulière, tout ce qu'il y a de plus standard. ta syntaxe utilisant les jointures implicite revient exactement au même, sauf qu'elle est moins propre.

n°1560857
lumi
Posté le 15-05-2007 à 22:18:02  profilanswer
 

ok merci
 
le projet est envoyé
 
 
merci bcp a tout le monde pour l'aide
 
 
esperons que ca abboutira a une note correcte [:cerveau jap]


---------------

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3  4  5
Page Suivante

Aller à :
Ajouter une réponse
 

Sujets relatifs
import gros fichier SQL dans MysqlProb : Type de données VB6 et SQL Server
cherche codeur pour projet 3dCorrection d'une requete SQL Delete....
Projet SGBD / Access / SQL => Compatibilité logiciels[SQL/NOOB] cherche de l'aide sur un projet de base de données
Lister toutes les requettes SQL du projet en PHP ?PROJET BASE DE DONNEE ACCESS SQL GRAPHIQUE ? HELP PLEASE
SQL Projet de base de données bibliotheque[SQL] HELLO, Gros projet-->Générateur de requêtes sql
Plus de sujets relatifs à : Projet SQL


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR