Exercice Base de donnée

Fermé
TheRogerFederer Messages postés 256 Date d'inscription mercredi 31 mars 2010 Statut Membre Dernière intervention 10 mars 2016 - 2 févr. 2016 à 10:12
TheRogerFederer Messages postés 256 Date d'inscription mercredi 31 mars 2010 Statut Membre Dernière intervention 10 mars 2016 - 1 mars 2016 à 14:18
Bonjour, je sollicite votre aide pour cette exercice (j'espère que les screenshots seront lisibles), je poste le sujet

la première image :


la deuxième image :


la troisième image :


la quatrième image :


J'ai essayé de faire quelque chose sur chaque question mais je suis débutant (je précise que tout ceci est de niveau débutant), (je suis en BTS info 1ère année) :

1) SELECT automobile.numImma, COUNT(*) AS "nbre d'automobiles référencées"
FROM automobile

2) SELECT automobile.numImma, automobile.modele, marque.nom
FROM automobile, marque

3) SELECT automobile.idEnergie, energie.idEnergie, energie.libelleEnergie
FROM automobile NATURAL JOIN energie USING (idEnergie)
WHERE energie.libelleEnergie = 'diesel'

4) SELECT vrp.idVRP, suiviimpact.idVRP, suiviimpact.km
FROM vrp NATURAL JOIN suiviimpact USING (idVRP)
WHERE vrp.idVRP = suiviimpact.idVRP
AND km DESC

5) SELECT automobile.numImma, automobile.modele, suiviimpact.nbLitres
FROM automobile JOIN suiviimpact USING (numImma)
WHERE nbLitres ASC

6) SELECT automobile.numImma, automobile.dateAchat, automobile.modele
FROM automobile
WHERE dateAchat = MAX (dateAchat)

7) SELECT suiviimpact.km
FROM suiviimpact
WHERE suiviimpact.km DESC
AND idVRP IN (SELECT vrp.idVRP, vrp.dateEmbauche, nom, prenom
FROM vrp, suiviimpact
WHERE dateEmbauche = 1)

8) SELECT suiviimpact.date, automobile.gCO2km AS "empreinte carbone en tonne"
FROM automobile, suiviimpact
WHERE gCO2km = SUM(gCO2km)
AND suiviimpact.date = '2015'

9) Comprend pas la question...............


10) UPDATE pastille
SET idPastille = idPastille + 1
WHERE ..................

INSERT INTO pastille
FROM pastillesEco2015
VALUES (Couleur, Explications, Code)

11) SELECT
FROM energie NATURAL JOIN automobile USING (idEnergie)
WHERE libelleEnergie = 'Essence'
AND automobile.dateAchat BETWEEN '01/01/2006' AND '31/12/2010'
AND idEnergie IN (SELECT automobile.dateAchat, automobile.idEnergie, energie.libelleEnergie
FROM energie NATURAL JOIN automobile USING (idEnergie)
WHERE libelleEnergie = 'diesel'
AND automobile.dateAchat >= '01/01/2011')
A voir également:

13 réponses

jordane45 Messages postés 38241 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 septembre 2024 4 689
2 févr. 2016 à 14:21
Bonjour,

1 - La lecture des Images n'est pas évidentes....
il aurait été préférable que tu marques la question DIRECTEMENT dans le forum .... et qu'en dessous de chacune tu places le code tenté.
(ça nous éviterait de devoir ouvrir l'image.... puis la fermer... puis aller lire la réponse proposée.....etc....)

2 - ... lorsque tu postes du code sur le forum... merci d'utiliser la coloration syntaxique :
Explications disponibles ici :
https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code



3 -
Voici déjà la correction à la première question :
SELECT COUNT(automobile.numImma) AS "nbre d'automobiles référencées"
FROM automobile 



Pour les autres... j'attendrais que tu nous mettes (à la suite de cette discussion) les questions et les réponses proposées telles que je te l'ai décrit dans les points 1 & 2 de ce message.

0
TheRogerFederer Messages postés 256 Date d'inscription mercredi 31 mars 2010 Statut Membre Dernière intervention 10 mars 2016 1
Modifié par TheRogerFederer le 2/02/2016 à 15:31
Très bien, merci d'avoir pris le temps de répondre tout de même !

La question 2 est : Donnez la liste des automobiles accompagnées de leurs marques respectives (immatriculations, modèles et noms de marques).

Voilà ce que j'ai répondu :

SELECT automobile.numImma, automobile.modele, marque.nom 
FROM automobile, marque
0
jordane45 Messages postés 38241 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 septembre 2024 4 689
2 févr. 2016 à 15:33
Dans celle la ... tu utilises deux tables. ( une jointure donc )
Seulement ... tu as oublié d'indiquer ce qui les lie

SELECT A.numImma, A.modele, M.nom 
FROM automobile A, marque M
WHERE A.qqchose = M.qqchose


=> A toi de remplacer les "qqchose" par les champs qui permettent de faire la jointure.

PS: As tu remarqué que j'utilise des ALIAS pour le nom des tables... c'est plus simple à manipuler et rend le code plus lisible.
0
jordane45 Messages postés 38241 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 septembre 2024 4 689 > jordane45 Messages postés 38241 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 septembre 2024
2 févr. 2016 à 15:34
PS: De façons plus "propre".. tu peux faire la jointure comme ceci :
SELECT A.numImma, A.modele, M.nom 
FROM automobile A
LEFT JOIN  marque M ON  M.qqchose = A.qqchose

0
TheRogerFederer Messages postés 256 Date d'inscription mercredi 31 mars 2010 Statut Membre Dernière intervention 10 mars 2016 1 > jordane45 Messages postés 38241 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 septembre 2024
2 févr. 2016 à 15:40
La 1ere façon que tu m'as donné est équivalente a la 2ième de toute façon ??
0
TheRogerFederer Messages postés 256 Date d'inscription mercredi 31 mars 2010 Statut Membre Dernière intervention 10 mars 2016 1 > jordane45 Messages postés 38241 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 septembre 2024
2 févr. 2016 à 15:37
Oui j'ai remarqué, malgré mon niveau débutant je connais bien cela ;) ! Euh la jointure ce fait au niveau de la clé primaire/clé étrangère qu'ils se "partagent" ?

qqchose = idMarque ici c'est ça ?
0
jordane45 Messages postés 38241 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 septembre 2024 4 689 > TheRogerFederer Messages postés 256 Date d'inscription mercredi 31 mars 2010 Statut Membre Dernière intervention 10 mars 2016
2 févr. 2016 à 16:06
Oui
0
TheRogerFederer Messages postés 256 Date d'inscription mercredi 31 mars 2010 Statut Membre Dernière intervention 10 mars 2016 1
Modifié par TheRogerFederer le 2/02/2016 à 16:19
Pour la question 3 : De combien de diesel l’entreprise dispose-t-elle ?

J'avais pensé à cela mais ai-je oublié qqch et est-ce que la jointure est bonne ?

SELECT automobile.idEnergie, energie.idEnergie, energie.libelleEnergie
FROM automobile NATURAL JOIN energie USING (idEnergie)
WHERE energie.libelleEnergie = 'diesel'
0
jordane45 Messages postés 38241 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 septembre 2024 4 689
Modifié par jordane45 le 2/02/2016 à 18:45
Personnellement je n'ai jamais utilisé de jointure "NATURAL JOIN"

Mais au vu de la documentation : https://sql.sh/cours/jointures/natural-join .. j'ai l'impression que c'est bon.

Moi je l'aurai écrit avec une jointure LEFT :
SELECT automobile.idEnergie, energie.idEnergie, energie.libelleEnergie
FROM automobile  A
LEFT JOIN energie  E  ON E.idEnergie = A.idEnergie
WHERE E.libelleEnergie = 'diesel'
0
TheRogerFederer Messages postés 256 Date d'inscription mercredi 31 mars 2010 Statut Membre Dernière intervention 10 mars 2016 1 > jordane45 Messages postés 38241 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 septembre 2024
3 févr. 2016 à 09:16
Très bien, je vais la laisser comme cela alors !
0
TheRogerFederer Messages postés 256 Date d'inscription mercredi 31 mars 2010 Statut Membre Dernière intervention 10 mars 2016 1
Modifié par TheRogerFederer le 3/02/2016 à 09:19
Pour la question 4 : Donnez la liste de tous les VRP avec le kilométrage total que chacun a effectué, en affichant les plus kilométrés en premier.

J'ai pensé à :

SELECT vrp.idVRP, suiviimpact.idVRP, suiviimpact.km 
FROM vrp NATURAL JOIN suiviimpact USING (idVRP) 
WHERE vrp.idVRP = suiviimpact.idVRP 
AND km DESC 


Mais comme je sais que j'ai eu souvent à faire à des sous-requêtes, j'ai bien peur qu'il y en ai une a utiliser.............. et je suis vraiment pas fort avec ce genre de chose..........
0
jordane45 Messages postés 38241 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 septembre 2024 4 689
3 févr. 2016 à 09:51
Avant de continuer .... petite question.....
Est-ce que tu testes tes requêtes ?

Dans l'idéal... si ce n'est pas déjà fait... tu t'installes un logiciel comme WAMP ou XAMPP ou EASYPHP sur ton PC ...
ça te permettra d'y créer tes différentes TABLES (en mysql )
puis d'y faire tes requêtes pour voir ce qu'elles retournent....

nb: et tu peux evenutellement installer egalement le logiciel HeidiSQL qui permet de taper dans ta BDD directement sans avoir à passer par l'interface phpmyadmin.
Comme ceci : https://codes-sources.commentcamarche.net/faq/10778-heidisql-tester-ses-requetes-sql

Une fois que ces logiciels seront installés, donc ...., testes y tes requêtes.... et regarde si le résultat obtenu te semble correct.
0
jordane45 Messages postés 38241 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 septembre 2024 4 689
3 févr. 2016 à 09:53
Pour ce qui est de la question 4....
Une sous-requête ne sera pas nécessaire je pense.... par contre... si tu regardes la définition de km (dans ta première image).. tu verras que ce compteur est "journalier" ..... et donc... pour obtenir le TOTAL de KM de chaque VRP .. il va te falloir faire une SOMME (et utiliser un GROUP BY )
0
TheRogerFederer Messages postés 256 Date d'inscription mercredi 31 mars 2010 Statut Membre Dernière intervention 10 mars 2016 1 > jordane45 Messages postés 38241 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 septembre 2024
3 févr. 2016 à 10:12
Moi on m'a demandé de télécharger et d'utiliser PgAdmin et FlySpeedSQL, est ce que tu connait et est ce que ça peut marcher avec ceci ?
0
jordane45 Messages postés 38241 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 septembre 2024 4 689 > TheRogerFederer Messages postés 256 Date d'inscription mercredi 31 mars 2010 Statut Membre Dernière intervention 10 mars 2016
3 févr. 2016 à 10:15
Si on ta demandé d'utiliser ces logiciels... ben fais le.
perso je ne les connais pas..... mais bon... c'est du PostrgeSQL (et non du Mysql ) ... et ça permet également de mettre en place une BDD... et d'y tester les requêtes....... donc oui... ça VA fonctionner AUSSI.

NB : Comme indiqué... c'est du PostgréSQL (et non du MYSQL.... présente section du FORUM dans laquelle tu as posté ta question !! )
0
TheRogerFederer Messages postés 256 Date d'inscription mercredi 31 mars 2010 Statut Membre Dernière intervention 10 mars 2016 1 > jordane45 Messages postés 38241 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 septembre 2024
3 févr. 2016 à 10:16
Par contre que veut t'on grouper la ? Pcq avec un GROUP BY il faut forcément 2 critères à grouper...............?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jordane45 Messages postés 38241 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 septembre 2024 4 689
3 févr. 2016 à 11:34

Je viens de me rendre compte que c'est pas possible à créer sur PostgréSQL.......................................... On n'a pas de donnée sur les colonnes (Marque, automobile, energie, etc...........) On ne sait pas si c'est du type character, character varying, numeric, etc..................

Hein ???
C'est une question de ..... logique !

Lorsqu'un champ est nommé .... IDqqchose ... ben... c'est donc un ID et donc...(en général... du NUMERIQUE )
Un champ dateqqchose .. ben .. c'est une DATE
km .. c'est une valeur numérique....
Energie ( Essence / Diesel.. )... ben c'est du TEXTE (du Varchar )

Appuie toi sur le TABLEAU fourni dans ta première image !

Bien sûr .. pour la consomation par litre ... c'est du numérique ( pas besoin dans ta table de marquer "5 L" .... tu ne mets que : "5" ) ....

A toi de jouer.
0
TheRogerFederer Messages postés 256 Date d'inscription mercredi 31 mars 2010 Statut Membre Dernière intervention 10 mars 2016 1
3 févr. 2016 à 12:00
Je ne dis pas le contraire mais comme j'ai déjà vu des choses bizarre dans certains cours quand la chose n'est pas précisé, je ne m'avance plus...............
Merci en tout cas pour les conseils :)
0
TheRogerFederer Messages postés 256 Date d'inscription mercredi 31 mars 2010 Statut Membre Dernière intervention 10 mars 2016 1
3 févr. 2016 à 14:30
Oula ça me donne plein d'erreur du type :

ERREUR: erreur de syntaxe sur ou près de « USING »
État SQL :42601
Caractère : 88
0
jordane45 Messages postés 38241 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 septembre 2024 4 689 > TheRogerFederer Messages postés 256 Date d'inscription mercredi 31 mars 2010 Statut Membre Dernière intervention 10 mars 2016
3 févr. 2016 à 14:37
Je ne fais pas de postrgreSql .. mais pas sûr que NATURAL JOIN puisse coexister avec USING .....
Regardes la doc :
www.postgresql.org/docs/9.1/static/queries-table-expressions.html


The ON clause is the most general kind of join condition: it takes a Boolean value expression of the same kind as is used in a WHERE clause. A pair of rows from T1 and T2 match if the ON expression evaluates to true.

The USING clause is a shorthand that allows you to take advantage of the specific situation where both sides of the join use the same name for the joining column(s). It takes a comma-separated list of the shared column names and forms a join condition that includes an equality comparison for each one. For example, joining T1 and T2 with USING (a, b) produces the join condition ON T1.a = T2.a AND T1.b = T2.b.

Furthermore, the output of JOIN USING suppresses redundant columns: there is no need to print both of the matched columns, since they must have equal values. While JOIN ON produces all columns from T1 followed by all columns from T2, JOIN USING produces one output column for each of the listed column pairs (in the listed order), followed by any remaining columns from T1, followed by any remaining columns from T2.

Finally, NATURAL is a shorthand form of USING: it forms a USING list consisting of all column names that appear in both input tables. As with USING, these columns appear only once in the output table. If there are no common column names, NATURAL behaves like CROSS JOIN.


A mon avis... utilises, comme je te l'ai proposé, des LEFT JOIN
0
TheRogerFederer Messages postés 256 Date d'inscription mercredi 31 mars 2010 Statut Membre Dernière intervention 10 mars 2016 1 > jordane45 Messages postés 38241 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 septembre 2024
3 févr. 2016 à 14:42
Très bien alors maintenant en faisant comme toi, il me reste juste un erreur de signalé :

ERREUR: erreur de syntaxe sur ou près de « DESC »
État SQL :42601
Caractère : 170
0
TheRogerFederer Messages postés 256 Date d'inscription mercredi 31 mars 2010 Statut Membre Dernière intervention 10 mars 2016 1 > jordane45 Messages postés 38241 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 septembre 2024
Modifié par TheRogerFederer le 3/02/2016 à 14:43
J'ai écrit exactement :

SELECT vrp.idVRP, suiviimpact.idVRP, suiviimpact.km
FROM vrp LEFT JOIN suiviimpact ON vrp.idVRP = suiviimpact.idVRP
WHERE vrp.idVRP = suiviimpact.idVRP
GROUP BY VRP, km DESC
0
jordane45 Messages postés 38241 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 septembre 2024 4 689
3 févr. 2016 à 16:14
Pour la question 5 : Indice.... au lieu de SUM ... faudra utiliser AVG (Average = Moyenne )

0
TheRogerFederer Messages postés 256 Date d'inscription mercredi 31 mars 2010 Statut Membre Dernière intervention 10 mars 2016 1
Modifié par TheRogerFederer le 3/02/2016 à 16:16
Pour la question 5 : Donnez la liste des automobiles (immatriculation, modèle et consommation moyenne au 100 km), en affichant les plus économiques en carburant en premier.

J'avais pensé à ceci :

SELECT automobile.numImma, automobile.modele, suiviimpact.nbLitres
FROM automobile JOIN suiviimpact USING (numImma)
ORDER BY nbLitres ASC


En testant il ne me renvoie pas d'erreur...
0
jordane45 Messages postés 38241 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 septembre 2024 4 689
3 févr. 2016 à 16:19
Il demande la "consommation moyenne" .... hors... là .. je pense que tu as plusieurs lignes pour une seule voiture non ?
il va surement falloir faire du GROUP BY ... et calculer la moyenne ( via AVG peut être )
0
TheRogerFederer Messages postés 256 Date d'inscription mercredi 31 mars 2010 Statut Membre Dernière intervention 10 mars 2016 1 > jordane45 Messages postés 38241 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 septembre 2024
3 févr. 2016 à 16:21
Bien vu
0
TheRogerFederer Messages postés 256 Date d'inscription mercredi 31 mars 2010 Statut Membre Dernière intervention 10 mars 2016 1 > jordane45 Messages postés 38241 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 septembre 2024
3 févr. 2016 à 16:24
SELECT automobile.numImma, automobile.modele, AVG (suiviimpact.nbLitres)
FROM automobile JOIN suiviimpact USING (numImma)
GROUP BY numImma, nbLitres 
ORDER BY nbLitres ASC
0
jordane45 Messages postés 38241 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 septembre 2024 4 689 > TheRogerFederer Messages postés 256 Date d'inscription mercredi 31 mars 2010 Statut Membre Dernière intervention 10 mars 2016
3 févr. 2016 à 16:29
ça me parait pas trop mal
0
TheRogerFederer Messages postés 256 Date d'inscription mercredi 31 mars 2010 Statut Membre Dernière intervention 10 mars 2016 1
3 févr. 2016 à 16:33
Pour la question 6 : Quelle est l'automobile la plus récente (immatriculation, modèle et date d'achat) ?

J'avais pensé à cela :

SELECT automobile.numImma, automobile.dateAchat, automobile.modele
FROM automobile
WHERE dateAchat = MAX (dateAchat)


Mais il me retourne une erreur ! Je ne dois pas mettre de dateAchat = Max (...) dans un WHERE.
0
jordane45 Messages postés 38241 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 septembre 2024 4 689
3 févr. 2016 à 16:43
Peut être Un truc du genre :
SELECT A.numImma, A.dateAchat, A.modele, MAX (dateAchat) as MAX_DATE_ACHAT
FROM automobile A
LIMIT 1


Sinon.. faudra peut être regardé du côté de "HAVING" (à la place de WHERE )
0
TheRogerFederer Messages postés 256 Date d'inscription mercredi 31 mars 2010 Statut Membre Dernière intervention 10 mars 2016 1 > jordane45 Messages postés 38241 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 septembre 2024
3 févr. 2016 à 16:49
Si on met :

SELECT automobile.numImma, automobile.dateAchat, automobile.modele
FROM automobile
HAVING dateAchat = MAX (dateAchat)


alors j'obtiens cette erreur :
ERREUR: la colonne « automobile.numimma » doit apparaître dans la clause GROUP BY ou doit être utilisé dans une fonction d'agrégat
LINE 1: SELECT automobile.numImma, automobile.dateAchat, automobile....
^
                    • Erreur **********


ERREUR: la colonne « automobile.numimma » doit apparaître dans la clause GROUP BY ou doit être utilisé dans une fonction d'agrégat
État SQL :42803
Caractère : 8
0
jordane45 Messages postés 38241 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 septembre 2024 4 689 > TheRogerFederer Messages postés 256 Date d'inscription mercredi 31 mars 2010 Statut Membre Dernière intervention 10 mars 2016
3 févr. 2016 à 17:05
1 - Que donne la première requête que je t'ai donné ?

2- Il ne suffit pas de changer le mot WHERE par HAVING .....
Regardes la doc ... et cherche des exemples sur le net.
0
TheRogerFederer Messages postés 256 Date d'inscription mercredi 31 mars 2010 Statut Membre Dernière intervention 10 mars 2016 1 > jordane45 Messages postés 38241 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 septembre 2024
3 févr. 2016 à 17:11
C'est ce que j'ai trouvé : HAVING : quelles sont les conditions pour rejoindre un regroupement ?
syntaxe : HAVING conditions
0
jordane45 Messages postés 38241 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 septembre 2024 4 689 > TheRogerFederer Messages postés 256 Date d'inscription mercredi 31 mars 2010 Statut Membre Dernière intervention 10 mars 2016
Modifié par jordane45 le 3/02/2016 à 17:13
Et je repose la question.........;
que donne la requête :
SELECT A.numImma, A.dateAchat, A.modele, MAX(A.dateAchat) as MAX_DATE_ACHAT
FROM automobile A
LIMIT 1
0
TheRogerFederer Messages postés 256 Date d'inscription mercredi 31 mars 2010 Statut Membre Dernière intervention 10 mars 2016 1
4 févr. 2016 à 11:52
Est ce qu'on peut juste regarder les requêtes 7, 9 (parce que celle la j'ai rien fais, je comprends pas, je vois surtout pas ce qu'il faut faire.............), la 10 juste pour vérification parce que si tu es d'accord je te parlerai de qqch que j'ai vu en cours (pour intercaler une donnée)............, et la 11 j'ai fais qqch mais j'y crois pas trop ??
0
jordane45 Messages postés 38241 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 septembre 2024 4 689
4 févr. 2016 à 23:53
Ca ne sert à rien de me réécrire le même message toutes les 3 heures ......
Si je ne répond pas... c'est que je n'ai pas le temps....

Donc là .... je suis présent :
voici donc de l'aide ......

Pour la question 9 .... il est demandé de modifier ta BDD ... la requête à fournir sera donc celle qui permet de faire ces modifications ( des ALTER sûrement....)

Pour la 7 ... .. comme indiqué dans la question .. il faut trouver les deux VRP les plus anciens de la boite (donc ceux qui ont été embauchés depuis le plus longtemps...) ... faire la somme respective de leurs kilomètres ... et faire un ORDER sur celui qui a le plus de km ....


..et....Pour les autres.... ben ... comme pour les précédentes.... Montres ce que tu as essayé ....
Sachant que si tu as testé tes requêtes dans ta BDD ... ben tu dois être en mesure de voir si le résultat obtenu te semble correcte ou non.
0
TheRogerFederer Messages postés 256 Date d'inscription mercredi 31 mars 2010 Statut Membre Dernière intervention 10 mars 2016 1 > jordane45 Messages postés 38241 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 septembre 2024
5 févr. 2016 à 09:09
Bonjour, je n'ai pas fait exprès de poster plusieurs fois la même chose, la première fois mon message c'est effacé tout seul alors je l'ai retapé mais en faite apparemment il avait marché.......................... Moi en tout cas il n'était plus visible !

Oui et non pour la vérification !
0
TheRogerFederer Messages postés 256 Date d'inscription mercredi 31 mars 2010 Statut Membre Dernière intervention 10 mars 2016 1 > jordane45 Messages postés 38241 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 septembre 2024
8 févr. 2016 à 11:37
Pour la requête 7, en mettant :

SELECT SUM (suiviimpact.km)
FROM suiviimpact
ORDER BY suiviimpact.km DESC
AND idVRP IN (SELECT vrp.idVRP, vrp.dateEmbauche, nom, prenom
		 FROM vrp, suiviimpact
		 WHERE dateEmbauche = 1)


Je sais que la date dans dateEmbauche n'est pas bonne car le format ne correspond pas, mais je ne vois pas comment faire autrement ! Pour le reste en testant j'ai ceci comme erreur :

ERREUR: erreur de syntaxe sur ou près de « AND »
LINE 4: AND idVRP IN (SELECT vrp.idVRP, vrp.dateEmbauche, nom, preno...
^
                    • Erreur **********


ERREUR: erreur de syntaxe sur ou près de « AND »
État SQL :42601
Caractère : 75
0
jordane45 Messages postés 38241 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 septembre 2024 4 689 > TheRogerFederer Messages postés 256 Date d'inscription mercredi 31 mars 2010 Statut Membre Dernière intervention 10 mars 2016
8 févr. 2016 à 12:18
Tu mets un AND ... mais tu n'as pas mis de WHERE.
0
TheRogerFederer Messages postés 256 Date d'inscription mercredi 31 mars 2010 Statut Membre Dernière intervention 10 mars 2016 1 > jordane45 Messages postés 38241 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 septembre 2024
Modifié par TheRogerFederer le 8/02/2016 à 14:18
Oups à oui ! Oublie de ma part !

SELECT SUM (suiviimpact.km)
    FROM suiviimpact
    WHERE suiviimpact.km
    ORDER BY suiviimpact.km DESC
    AND idVRP IN (SELECT vrp.idVRP, vrp.dateEmbauche, nom, prenom
          FROM vrp, suiviimpact
         WHERE dateEmbauche = .......)
0
TheRogerFederer Messages postés 256 Date d'inscription mercredi 31 mars 2010 Statut Membre Dernière intervention 10 mars 2016 1
Modifié par TheRogerFederer le 8/02/2016 à 12:04
Pour la requête 9, j'ai pensé à cela :

ALTER TABLE automobile
    ADD COLUMN idPastille numeric (4)
    ADD CONSTRAINT fk_pastille FOREIGN KEY (idPastille) 
           REFERENCES pastille (idPastille)


effectivement avec un alter ça à l'air pas mal

puis on créer la table pastille qui n'existe pas encore :

CREATE TABLE pastille 
(
idPastille numeric (4) PRIMARY KEY,
couleur character varying
libelleCouleur character varying
)
0
jordane45 Messages postés 38241 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 septembre 2024 4 689
8 févr. 2016 à 12:19
Pas mal je pense.
0
TheRogerFederer Messages postés 256 Date d'inscription mercredi 31 mars 2010 Statut Membre Dernière intervention 10 mars 2016 1 > jordane45 Messages postés 38241 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 septembre 2024
8 févr. 2016 à 14:16
Oui je pense aussi
0
TheRogerFederer Messages postés 256 Date d'inscription mercredi 31 mars 2010 Statut Membre Dernière intervention 10 mars 2016 1
10 févr. 2016 à 09:48
Enfaite pour la requête 7 je pense que cela serai mieux :

SELECT T1.idVRP, T1.nom, t1.prenom, SUM(T2.km)
FROM VRP as T1
INNER JOIN suiviimpact as T2
   ON T2.idVRP = T1.idVRP
WHERE NOT exists
     (SELECT 1
      FROM vrp as T3
      where T3.dateEmbauche < T1.dateEmbauche)
GROUP BY T1.idVRP, T1.nom, t1.prenom
ORDER BY SUM(T2.km)DESC
0
TheRogerFederer Messages postés 256 Date d'inscription mercredi 31 mars 2010 Statut Membre Dernière intervention 10 mars 2016 1
16 févr. 2016 à 13:07
Plus d'idée ?
0
jordane45 Messages postés 38241 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 septembre 2024 4 689
16 févr. 2016 à 13:18
Ben... je ne sais pas .... ......Plus de question ??

Si tu ne poses pas de nouvelle question.... tu n'auras pas de nouvelle réponse !
Et comme avant .... il nous faut la question + la requête que tu as essayé .... (et bien entendu... requête que tu auras testé au préalable directement dans ta BDD..... )
0
TheRogerFederer Messages postés 256 Date d'inscription mercredi 31 mars 2010 Statut Membre Dernière intervention 10 mars 2016 1 > jordane45 Messages postés 38241 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 septembre 2024
16 févr. 2016 à 16:20
Bah regarde au dessus pour la requête 7 j'ai pensé à cela et ça ne me renvoie pas d'erreur je suppose donc que c'est bon !
0
jordane45 Messages postés 38241 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 septembre 2024 4 689 > TheRogerFederer Messages postés 256 Date d'inscription mercredi 31 mars 2010 Statut Membre Dernière intervention 10 mars 2016
16 févr. 2016 à 17:09
Tu l'as testé cette requête ???
Pour toi ... le résultat obtenu dans ta BDD te semble correcte ???

Moi ça me semble pas mal.
Par contre .. vu que la question c'est :" Les deux plus anciens...." ... ajoute un LIMIT 2 à la fin
0
TheRogerFederer Messages postés 256 Date d'inscription mercredi 31 mars 2010 Statut Membre Dernière intervention 10 mars 2016 1 > jordane45 Messages postés 38241 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 septembre 2024
Modifié par TheRogerFederer le 17/02/2016 à 13:04
Après le ORDER BY ? Oui je l'ai testé, ça ne me renvoie pas d'erreur
0
TheRogerFederer Messages postés 256 Date d'inscription mercredi 31 mars 2010 Statut Membre Dernière intervention 10 mars 2016 1
1 mars 2016 à 11:57
Re-bonjour, pour la requête 11 : Attribuez la pastille "Verte-Anis" à tous nos véhicule concernés.

J'ai pensé à faire cela :

SELECT automobile.idEnergie, automobile.numImma, automobile.dateAchat,                            energie.libelleEnergie 
      FROM energie NATURAL JOIN automobile USING (idEnergie)
      WHERE libelleEnergie = 'Essence'
      AND automobile.dateAchat BETWEEN '01/01/2006' AND '31/12/2010'
      AND idEnergie IN (SELECT automobile.dateAchat, automobile.idEnergie, energie.libelleEnergie
		               FROM energie NATURAL JOIN automobile USING (idEnergie)
		               WHERE libelleEnergie = 'diesel'
                                       AND automobile.dateAchat >= '01/01/2011')

0
jordane45 Messages postés 38241 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 septembre 2024 4 689
1 mars 2016 à 12:15
Je vais radotter .... mais ..... si tu as testé la requête dans ta BDD en direct ... est-ce que le résultat te semble cohérent ????
Si oui... c'est que c'est bon non ??!

Mais bon;... Je ferais l'inverse...
Je ferais un SELECT sur la table automobile avec un JOIN sur la table energie.
et je ferais même un CASE WHEN pour spécifier chaque vignette en fonction des différents critères.
0
TheRogerFederer Messages postés 256 Date d'inscription mercredi 31 mars 2010 Statut Membre Dernière intervention 10 mars 2016 1
1 mars 2016 à 14:18
Eh bien comme je l'ai dis, dans pgadmin, quand c'est juste il ne me montre rien, juste du vide donc je suppose que c'est bon, et quand c'est faux, heureusement il me montre les erreurs !! A partir de la difficile de dire ce qu'il ne va pas !! Je peux dire si c'est juste ou faux, mais je sais pas si il me renvoie ce qu'il faut !
0