p
u
b
l
i
c
i
t
é
publicité

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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 chevronné
    Homme Profil pro
    Inscrit en
    juin 2011
    Messages
    442
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Ingénieur d'études en informatique
    Inscrit en
    août 2006
    Messages
    14 616
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    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 : 14 616
    Points : 28 061
    Points
    28 061

    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    3 689
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : janvier 2010
    Messages : 3 689
    Points : 7 079
    Points
    7 079

    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Étudiant
    Inscrit en
    janvier 2014
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT MAX (positionArr)
    FROM classement
    WHERE nomPays= 'Suisse';
    Merci d'avance.

Discussions similaires

  1. Réponses: 5
    Dernier message: 15/09/2006, 17h08
  2. Capter les requêtes SQL
    Par ced62 dans le forum Oracle
    Réponses: 12
    Dernier message: 28/06/2006, 17h32
  3. [D5][BDE][Multibase] Récupérer les requêtes SQL d'une TTable
    Par Escandil dans le forum Bases de données
    Réponses: 3
    Dernier message: 11/01/2006, 14h29
  4. [iBatis] Logger les requètes SQL
    Par bslota dans le forum Persistance
    Réponses: 2
    Dernier message: 25/11/2005, 14h29
  5. tracer les requêtes SQL
    Par izioto dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 13/10/2005, 16h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo