IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Les requêtes SQL


Sujet :

Langage SQL

  1. #21
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 6
    Points : 8
    Points
    8
    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 confirmé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    445
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 445
    Points : 622
    Points
    622
    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
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 6
    Points : 8
    Points
    8
    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 ‘%2010GROUP 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
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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 : 16 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    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 ‘%2010GROUP 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 !

  5. #25
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 6
    Points : 8
    Points
    8
    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 ‘%2010GROUP 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
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    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
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 6
    Points : 8
    Points
    8
    Par défaut
    Merci, c'est exactement ce que je cherchais.

  8. #28
    Nouveau Candidat au Club
    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. [SQL] Sprintf ou concaténation pour créer les requêtes SQL?
    Par EvilAngel dans le forum PHP & Base de données
    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 des données
    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