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

Requêtes MySQL Discussion :

Aide sur requête


Sujet :

Requêtes MySQL

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2019
    Messages : 7
    Points : 8
    Points
    8
    Par défaut Aide sur requête
    Bonjour a tous,
    j'ai besoin d'aide sur une requete SQL, j'ai une question qui me dis : "Existe-t-il des mois ou toutes les villes de France ont une pluviométrie supérieure à 200 mm"

    du coup j'ai fais cette requete la mais cela m'affiche chaque mois pour chaque ville qui a une pluviométrie de plus de 200 or je ne vois pas comment faire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT pluie.ville, pluie.mois, pluviometrie 
    FROM pluie, localisation, pays
    WHERE pluie.ville=localisation.ville 
    AND localisation.pays=pays.pays 
    AND EXISTS(SELECT localisation.ville 
               FROM localisation, pays 
               WHERE localisation.pays=pays.pays
               AND pluie.pluviometrie > 200
               AND localisation.pays ='France'
              )[ATTACH=CONFIG]567580[/ATTACH]
    Nom : table.PNG
Affichages : 112
Taille : 6,6 Ko

  2. #2
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    Il faut que tu cherches les mois ou le COUNT des villes à plus de 200 mm3 est égal au COUNT total des villes.
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2019
    Messages : 7
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par Antoun Voir le message
    Il faut que tu cherches les mois ou le COUNT des villes à plus de 200 mm3 est égal au COUNT total des villes.
    Je vois pas trop...
    j'ai fais cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT COUNT(pluie.ville), count(pluie.mois), pluie.pluviometrie
    FROM pluie, localisation, pays
    WHERE pluie.ville=localisation.ville 
    AND localisation.pays=pays.pays 
     
    AND EXISTS(SELECT localisation.ville 
               FROM localisation, pays 
               WHERE localisation.pays=pays.pays
               AND localisation.pays='France'
               AND pluie.pluviometrie > 200
              )
    mais ca me donne ca
    Nom : count.PNG
Affichages : 100
Taille : 4,8 Ko

  4. #4
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    Ton WHERE EXISTS ne fait que t'envoyer les cas où la pluviométrie est supérieure à 200, on va dire pour simplifier les villes positives. Ce que tu veux faire demande au contraire de rechercher les mois où toutes les villes sont positives, autrement dit les mois où le nombre de villes positives est égal au nombre de villes total.

    Je te propose donc la mise en code suivante, sans pouvoir tester puisque tu ne donnes pas la structure de tes tables.
    Le nombre de villes chaque mois :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT mois, COUNT(DISTINCT ville)
    FROM pluie
    GROUP BY mois
    Le nombre de villes positives chaque mois :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT mois, COUNT(DISTINCT ville)
    FROM pluie
    WHERE pluviometrie > 200
    GROUP BY mois
    Ta requête principale réécrite avec des jointures normalisées :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT pluie.ville, pluie.mois, pluviometrie 
    FROM pluie Pl, 
      INNER JOIN localisation Loc ON Pl.ville = Loc.ville 
      INNER JOIN pays Pa ON Loc.pays = Pa.pays -- au passage, je ne vois pas à quoi sert cette table
    WHERE Loc.pays ='France'
    Donc, en réassemblant les morceaux, ça donne ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT pluie.ville, pluie.mois, pluviometrie 
    FROM pluie Pl, 
      INNER JOIN localisation Loc ON Pl.ville = Loc.ville 
      INNER JOIN pays Pa ON Loc.pays = Pa.pays -- au passage, je ne vois pas à quoi te sert cette table dans cette requête
    WHERE Loc.pays ='France'
      AND (SELECT COUNT(DISTINCT P2.ville) FROM pluie P2 WHERE P2.mois = Pl.mois AND P2.ville = Pl.ville)
        = (SELECT COUNT(DISTINCT P3.ville) FROM pluie P3 WHERE P3.mois = Pl.mois AND P3.ville = Pl.ville AND P3.pluviometrie > 200)
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  5. #5
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    Une autre solution, peut-être plus simple, consiste à recherche les mois où il n'existe pas de ville négative :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT pluie.ville, pluie.mois, pluviometrie 
    FROM pluie Pl, 
      INNER JOIN localisation Loc ON Pl.ville = Loc.ville 
      INNER JOIN pays Pa ON Loc.pays = Pa.pays
    WHERE Loc.pays ='France'
      AND NOT EXISTS (SELECT 1 FROM pluie P2 WHERE P2.mois = Pl.mois AND P2.ville = Pl.ville AND P2.pluviometrie <= 200)
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2019
    Messages : 7
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par Antoun Voir le message
    Une autre solution, peut-être plus simple, consiste à recherche les mois où il n'existe pas de ville négative :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT pluie.ville, pluie.mois, pluviometrie 
    FROM pluie Pl, 
      INNER JOIN localisation Loc ON Pl.ville = Loc.ville 
      INNER JOIN pays Pa ON Loc.pays = Pa.pays
    WHERE Loc.pays ='France'
      AND NOT EXISTS (SELECT 1 FROM pluie P2 WHERE P2.mois = Pl.mois AND P2.ville = Pl.ville AND P2.pluviometrie <= 200)
    Merci beaucoup a toi pour tes réponse ! Cependant j'ai tester et je me retrouve tjrs avec le même résultat :/
    Cela m'affiche tjrs toutes les villes avec le mois qui ont plus de 200 mm alors que moi je veux juste savoir si il existe un mois ou toutes les villes de france ont plus de 200
    (pour voir si cela fonctionne j'ai fais en sorte que les villes de france donc Dijon, paris et caen est toutes les trois le mois d'octobre en commun avec plus de 200 mm)
    Je te met la structure de ma base si cela peut t'aider.
    Nom : base.PNG
Affichages : 91
Taille : 27,7 Ko

  7. #7
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    Effectivement, il y a deux erreurs dans ma requête : la première c'est que j'ai laissé une corrélation sur la ville dans mon NOT EXISTS, alors qu'il doit faire la recherche pour toutes les villes ; la seconde, c'est de ne pas avoir remis en cause ta requête de base : si tu veux une liste de mois, il ne faut pas y mettre la ville et la pluviométrie.

    Je te propose donc ça, qui devrait répondre à la question "y a-t-il des mois où toutes les villes du monde ont une pluviométrie supérieure à 200 mm3 ?" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT DISTINCT P1.mois
    FROM pluie P1
      WHERE NOT EXISTS (SELECT 1 FROM pluie P2 WHERE P2.mois = P1.mois AND P2.pluviometrie <= 200)
    Et si jamais ta question était plutôt "y a-t-il des mois où toutes les villes française ont une pluviométrie supérieure à 200 mm3 ?", ça devrait être un truc comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT DISTINCT P1.mois
    FROM pluie P1
    WHERE NOT EXISTS (
        SELECT 1 
        FROM pluie P2 INNER JOIN localisation L ON P2.ville = L.ville
        WHERE P2.mois = P1.mois AND L.pays = 'France' AND P2.pluviometrie <= 200
        )
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

Discussions similaires

  1. [Exercice] Aide sur requête
    Par Dobyan08 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 09/02/2006, 15h47
  2. Aide sur requêtes
    Par Virgile59 dans le forum Access
    Réponses: 6
    Dernier message: 08/02/2006, 16h05
  3. aide sur requête sql
    Par Vodkha dans le forum Langage SQL
    Réponses: 9
    Dernier message: 30/08/2005, 17h53
  4. Aide sur Requête SQL
    Par devdev dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 11/05/2005, 12h33
  5. Besoin d'aide sur requête croisée
    Par keawee dans le forum Access
    Réponses: 7
    Dernier message: 18/11/2004, 09h46

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