Publicité
+ Répondre à la discussion
Page 2 sur 2 PremièrePremière 12
Affichage des résultats 21 à 28 sur 28

Discussion: Les requêtes SQL

  1. #21
    Invité régulier
    Inscrit en
    février 2013
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : février 2013
    Messages : 6
    Points : 6
    Points
    6

    Par défaut

    J'ai énormément de mal pour la requête 7 aussi, après 3 heures de recherche je suis parvenu à ça

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Requête 7
     
    SELECT "Prenom", "Nom", COUNT(*) AS "Nbre de courses non terminées"
     
    FROM  (	SELECT p.prenom AS "Prenom", p.nom AS "Nom", 
    		FROM pilote AS p JOIN classement AS cl ON (p.idPilote = cl.idPilote)
    		AND cl.positionArr IS NULL
    	)
     
    WHERE COUNT(*) >= 3
    AND cl.dateCourse LIKE '%2010'
    Mais je ne sais pas, je pense qu'il y a un problème au niveau du test WHERE COUNT(*) >= 3.

    Merci de me lire. (Et de m'aider, le cas échéant.)

  2. #22
    Membre expérimenté
    Homme Profil pro Frédéric
    Inscrit en
    juin 2011
    Messages
    442
    Détails du profil
    Informations personnelles :
    Nom : Homme Frédéric
    Localisation : France

    Informations forums :
    Inscription : juin 2011
    Messages : 442
    Points : 550
    Points
    550

    Par défaut

    Pour la requête 4, ne faut-il pas utiliser MIN plutôt que MAX ?
    Sinon, je pense que ta requête fonctionne.

    Pour la requête 5, je ne pense pas qu'une somme puisse t’aider...

    Pour la requête 7, ne te compliques pas les choses en essayant d'afficher le nom et le prénom.
    Commence par l'écrire en utilisant uniquement la table classement. (Il te faudra aussi un GROUP BY)

  3. #23
    Invité régulier
    Inscrit en
    février 2013
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : février 2013
    Messages : 6
    Points : 6
    Points
    6

    Par défaut

    Merci de ta réponse Fred, en effet pour la requête 3 c'est bien un MIN.
    Pour la 4 par contre je pense que la mienne marche avec SUM DISTINCT.

    requête 4 :

    Code :
    1
    2
    3
    4
    5
    SELECT SUM DISTINCT(pays.nomPays)
    FROM classement 
    JOIN pilote ON(classement.idPilote = pilote.idPilote)
    JOIN pays ON (pilote.idPays = pays.idPays)
    WHERE classement.positionArr = '1'
    Pour la requête 7 j'ai appliqué vos conseils et je suis reparti du début, je pense avoir trouvé une solution :

    Code :
    1
    2
    3
    4
    5
    6
    SELECT COUNT(classement.idPilote) AS temp, classement.idPilote, pilote.nom, pilote.prenom 
    FROM classement JOIN pilote ON classement.idPilote = pilote.idPilote 
    WHERE positionArr IS NULL
    AND dateCourse LIKE ‘%2010’ 
    GROUP BY classement.idPilote 
    HAVING temp >2 ;
    Merci d'avance

  4. #24
    Modérateur
    Avatar de CinePhil
    Homme Profil pro Philippe Leménager
    Ingénieur d'études en informatique
    Inscrit en
    août 2006
    Messages
    13 817
    Détails du profil
    Informations personnelles :
    Nom : Homme Philippe Leménager
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : août 2006
    Messages : 13 817
    Points : 23 076
    Points
    23 076

    Par défaut

    Citation Envoyé par Moskitox Voir le message
    Pour la requête 3, vous parlez de requête imbriqué, or il me semble l'avoir fait avec seulement 3 natural join plus la restriction du pays 'Suisse' comme ceci

    Code :
    1
    2
    3
    4
    Requête 3
    SELECT MAX(classement.positionArr)
    FROM classement NATURAL JOIN pilote NATURAL JOIN pays 
    WHERE pays.nomPays = 'Suisse'
    Reprenons l'énoncé :
    Requête 3:
    Quel est le meilleur résultat au palmarès d'un pilote Suisse?
    Est-ce que la position max est le meilleur résultat ?

    Une remarque également :
    Il vaut mieux écrire les conditions de jointure en clair plutôt que d'utiliser le NATURAL JOIN.

    De même pour la requête 4, je vois que vous conseillez un Count Distinct, alors qu'au vu de la question cela serais plutôt un SUM DISTINCT étant donnée qu'il nous es demandé combien d'hymnes nationaux différents ont déjà été joués au total
    Puis plus tard...
    Pour la 4 par contre je pense que la mienne marche avec SUM DISTINCT.
    Code :
    1
    2
    3
    4
    5
    SELECT SUM DISTINCT(pays.nomPays)
    FROM classement 
    JOIN pilote ON(classement.idPilote = pilote.idPilote)
    JOIN pays ON (pilote.idPays = pays.idPays)
    WHERE classement.positionArr = '1'
    Si j'additionne France et Espagne, ça donne quoi comme résultat ?
    En plus, c'est faux syntaxiquement.

    Pour la requête 7 j'ai appliqué vos conseils et je suis reparti du début, je pense avoir trouvé une solution :
    Code :
    1
    2
    3
    4
    5
    6
    SELECT COUNT(classement.idPilote) AS temp, classement.idPilote, pilote.nom, pilote.prenom 
    FROM classement JOIN pilote ON classement.idPilote = pilote.idPilote 
    WHERE positionArr IS NULL
    AND dateCourse LIKE ‘%2010’ 
    GROUP BY classement.idPilote 
    HAVING temp >2 ;
    Toutes les colonnes du SELECT ne figurant pas dans une fonction de groupage doivent figurer dans le GROUP BY sous peine de récupérer pour les colonnes absentes des résultats aléatoires.

    Try again !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Autoentrepreneur.
    Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #25
    Invité régulier
    Inscrit en
    février 2013
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : février 2013
    Messages : 6
    Points : 6
    Points
    6

    Par défaut

    Effectivement, cela paraissait évident... erreur rectifié! (Il y avais une erreur de syntaxe ?)

    Requête 4

    Code :
    1
    2
    3
    SELECT COUNT DISTINCT (pays.nomPays)
    FROM classement JOIN pilote ON(classement.idPilote = pilote.idPilote) JOIN pays ON (pilote.idPays = pays.idPays)
    WHERE classement.positionArr = '1'
    Je ne suis pas persuadé de la véracité de ma requête 6, j'ai essayé de prendre exemple sur votre requête N°8 en placant une sous req. en JOIN :

    Requête 6

    Code :
    1
    2
    3
    4
    5
    6
    7
    SELECT p.nom, p.prenom, cl.positionArr
    FROM pilote AS p RIGHT JOIN classement AS cl ON (p.idPilote = cl.idPilote)
    RIGHT JOIN ( 
    			SELECT MAX(c.dateCourse)
    			FROM course
    		) AS temp ON (temp.dateCourse = cl.dateCourse)
    ORDER BY cl.positionArr ASC
    Concernant la requête 7, je pense avoir compris votre message et ainsi rectifié :

    Requête 7

    Code :
    1
    2
    3
    4
    5
    6
    SELECT COUNT(classement.idPilote) AS temp, pilote.nom, pilote.prenom 
    FROM classement JOIN pilote ON classement.idPilote = pilote.idPilote 
    WHERE positionArr IS NULL
    AND dateCourse LIKE ‘%2010’ 
    GROUP BY pilote.nom, pilote.prenom
    HAVING temp > 3
    J'ai une petite question supplémentaire n'ayant rien à voir avec cet exercice.

    J'ai une nouvelle table temporaire que j'aimerai implanter dans une table existante de la manière suivante :

    INSERT INTO table_1
    SELECT *
    FROM table_temp

    La table temp contient 2 champs/colonnes dont un est identique à un des champs de table_1 donc pas de soucis mais l'autre a un nom différent ... comment faire pour que ce champ aille au bon endroit dans table_1 ?

    Merci beaucoup pour votre aide.

  6. #26
    Modérateur

    Profil pro
    Inscrit en
    janvier 2010
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : janvier 2010
    Messages : 2 978
    Points : 4 966
    Points
    4 966

    Par défaut

    Bonjour,

    Citation Envoyé par Moskitox Voir le message
    J'ai une nouvelle table temporaire que j'aimerai implanter dans une table existante de la manière suivante :

    INSERT INTO table_1
    SELECT *
    FROM table_temp

    La table temp contient 2 champs/colonnes dont un est identique à un des champs de table_1 donc pas de soucis mais l'autre a un nom différent ... comment faire pour que ce champ aille au bon endroit dans table_1 ?

    Merci beaucoup pour votre aide.
    En spécifiant leur nom, comme il devrait être fait systématiquement :

    Code :
    1
    2
    3
    4
     
    INSERT INTO table_1 (ColonneA, ColonneX)
        SELECT ColonneA, ColonneY
        FROM table_temp

  7. #27
    Invité régulier
    Inscrit en
    février 2013
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : février 2013
    Messages : 6
    Points : 6
    Points
    6

    Par défaut

    Merci, c'est exactement ce que je cherchais.

  8. #28
    Invité de passage
    Homme Profil pro arnaud
    Étudiant
    Inscrit en
    janvier 2014
    Messages
    1
    Détails du profil
    Informations personnelles :
    Nom : Homme arnaud
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : janvier 2014
    Messages : 1
    Points : 1
    Points
    1

    Par défaut Problème question 3

    Bonjour

    j'ai le même devoir moi aussi et je butte sur la question trois ; enfin j'ai une réponse mais je ne sais pas si elle est faisable.
    Pouvez-vous me donner votre avis ? Merci.

    "Quel est le meilleur résultat au palmarès d'un pilote Suisse ?"

    J'ai trouvé ça :
    Code :
    1
    2
    3
    SELECT MAX (positionArr)
    FROM classement
    WHERE nomPays= 'Suisse';
    Merci d'avance.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •