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 :

Pour verifier la bonne forme d'une requête


Sujet :

Langage SQL

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

    Informations forums :
    Inscription : Février 2011
    Messages : 13
    Points : 6
    Points
    6
    Par défaut Pour verifier la bonne forme d'une requête
    Bonsoir à tous !
    J'ai repris récemment mes études et on a des exercices sur les bases de données... Sauf que... Je n'ai jamais fait de requete SQL auparavant ! Alors j'ai lu, relu les cours, lu plein de sites, trouvé plein d'infos surtout sur developpez et j'ai tenté de faire l'exercice ! L'un d'entre vous (ou plusieurs) pourrait-til me donner son avis !

    J'ai trouvé la requete suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT Renault, jour, valeurouverture, valeurfermeture
      FROM COURSACTIONS
     WHERE (valeurfermeture>valeurouverture)
     UNION
    SELECT jour, pluie
      FROM METEO
    à la question :
    Quelle est l’intensité de pluie les jours où l’action Renault a augmenté ?

    L'intitulé est le suivant :
    On considère la base de données relationnelle en 3ième forme normale ci-dessous :
    ACTIONS(nomaction, secteur)
    COURSACTIONS(nomaction, jour, valeurouverture, valeurfermeture, valeurmin, valeurmax)
    METEO(jour, tempmin, tempmax, pluie)
    La table ACTIONS recense les actions cotées en bourse et le secteur d‘activité de leur entreprise.
    La table COURSACTIONS recense, pour chaque jour et pour chaque action, la valeur de l’action à l’ouverture, la valeur à la fermeture, la valeur la plus basse de l’action ce jour et la valeur la plus haute atteinte par l’action le même jour.
    La table METEO donne pour chaque jour la température minimale, la température maximale et l’intensité de la pluie à PARIS (‘sans’, ‘faible’, ‘moyen’, ‘forte’).
    On suppose que la bourse est ouverte tous les jours de l’année.

    Merci de m'éclairer ! Me suis-je complètement planté ? Ou ai je oublié des données ?

    Merci d'avance ! Merci beaucoup !

    Et bonne soirée !

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 386
    Points
    18 386
    Par défaut
    Oui effectivement vous vous êtes planté, si vous essayez d'exécuter votre requête vous allez récupérer une erreur.
    N'avez-vous pas essayé votre code ?

    UNION permet en effet de réunir les résultats de deux requêtes.

    La première partie de votre requête me paraît correcte.
    Pour récupérer les informations liées à la METEO, c'est une jointure qu'il faut faire.

  3. #3
    Membre éprouvé Avatar de Oishiiii
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2009
    Messages
    508
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Août 2009
    Messages : 508
    Points : 1 107
    Points
    1 107
    Par défaut
    Bonsoir,

    Votre requête ne répond pas à la question.

    Avant de répondre il faut bien comprendre la question, et y aller étape par étape.

    Citation Envoyé par jedebute_et... Voir le message
    Quelle est l’intensité de pluie les jours où l’action Renault a augmenté ?
    J'identifie trois grandes étapes que j'ai colorisé ci-dessus.

    On vous demande "Quelle est l'intensité de pluie....".
    Ce morceau de phrase c'est le résultat attendu de la requête, l'information que l'on cherche.
    C'est la clause SELECT principale.

    La requête commencera donc certainement par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT pluie
    FROM meteo
    La première étape se résume à cela.

    Pour la troisième, il faut que l'on identifie les jours où l'action Renault a augmenté:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT jour
    FROM coursactions
    WHERE nomaction = 'Renault'
      AND valeurfermeture > valeurouverture
    Du classique "SELECT-FROM-WHERE".

    Il ne reste plus que l'étape intermédiaire, il faut traduire ".les jours .."

    Pour cela j'utilise une sous-requête, avec IN:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT pluie
    FROM meteo
    WHERE jour IN (
      SELECT jour
      FROM coursactions
      WHERE nomaction = 'Renault'
        AND valeurfermeture > valeurouverture
    )
    Je vais chercher l'intensité de pluie pour les jours (WHERE jour) qui sont compris dans (IN) les jours où l'action Renault a augmenté.

    Il ne faut pas hésiter à découper les énoncés en petites étapes pour simplifier le travail.

    PS: Si vous n'avez pas étudié les sous-requêtes (avec IN), décrivez-nous les opérateurs que vous avez étudié, il est certainement possible de l'écrire d'une autre manière.
    Pour ce genre d'exercice il y a souvent plusieurs réponse possible.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Merci pour votre aide !!!

    Je n'ai effectivement pas étudié les sous-requetes. J'étais en train de recherche la partie du cours sur les jointures mais seule la jointure entre deux colonnes d' une même table est expliquée... !

    Concernant les opérateurs étudiés il y a :
    EXISTS
    Les opérateurs logique : AND, OR, NOT
    les comparateurs de chaines : BETWEEN, IN, IS NULL, LIKE
    et les comparateurs arithmétiques : égal, différent, inférieur, etc
    Il y a également les tris avec ORDER BY
    Groupe BY aussi

    J'avais eu une hypothèse en utilisant EXISTS, toujours pour la même requete, à savoir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT Jour, Pluie FROM METEO WHERE EXISTS (SELECT Jour FROM COURACTIONS WHERE Nomaction = Renault AND Valeur ouverture < Valeur fermeture)
    Mais j'en étais moins sûr que ma 1ère hypothèse !

    Merci encore !

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

    Informations forums :
    Inscription : Février 2011
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Et merci encore Oishiiii !

    Les 3 grandes étapes colorisée me font paraître la question plus claire !

  6. #6
    Membre éprouvé Avatar de Oishiiii
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2009
    Messages
    508
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Août 2009
    Messages : 508
    Points : 1 107
    Points
    1 107
    Par défaut
    L'opérateur EXISTS ressemble beaucoup à l'opérateur IN, mais celui-ci n'a vraiment de sens que lorsqu'il est utilisé avec une sous-requête corrélée.
    Il faut créer un "lien" entre la requête principale et la sous-requête.

    C'est au niveau de la clause WHERE, ici sur la colonne jour.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT pluie
    FROM meteo
    WHERE EXISTS (
      SELECT *
      FROM coursactions
      WHERE nomaction = 'Renault'
        AND valeurfermeture > valeurouverture
        AND meteo.jour = coursactions.jour
    )
    Sans cela la requête est incorrecte.

    PS: lorsqu'on utilise l'opérateur EXISTS, les colonnes de la clause SELECT de la sous-requête n'ont pas d'importance, on écrit souvent simplement SELECT *.

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    D'accord, donc a faire une sous requete, autant vaut peut etre utiliser IN. La première solution me "parle" plus. Mais j'essaie de comprendre la seconde.

    Si je comprend bien la dernière partie du code "AND meteo.jour = coursactions.jour équivaut à une sous requete qui lie
    " en langage humain" les jours de pluie avec l'action "précédemment choisie "Renault"

    Peut on choisir indifféremment une requete par rapport à une autre ? Y a t il des préférences d'écriture ? Dans les deux cas, il y a apparemment une sous requete à faire ?

    Petit à petit je vais comprendre, j'espère, du moins j'essaie.

    Merci encore !

  8. #8
    Membre éprouvé Avatar de Oishiiii
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2009
    Messages
    508
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Août 2009
    Messages : 508
    Points : 1 107
    Points
    1 107
    Par défaut
    Peu-importe la syntaxe ou les opérateurs utilisés tant que le résultat est correct.

    D'ailleurs lorsque j'étais en BTS, si on avait des difficultés avec les sous-requêtes, notre professeur nous autorisait à créer une vue, ce qui permettait de faire une simple jointure comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    CREATE VIEW vue_jourRenaultAugmentValeur AS
      SELECT jour
      FROM coursactions
      WHERE nomaction = 'Renault'
        AND valeurfermeture > valeurouverture;
     
    SELECT pluie
    FROM meteo NATURAL JOIN vue_jourRenaultAugmentValeur;
     
    -- ou avec la "vieille" syntaxe:
    SELECT pluie
    FROM meteo, vue_jourRenaultAugmentValeur
    WHERE vue_jourRenaultAugmentValeur.jour = meteo.jour;

  9. #9
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    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 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par Oishiiii
    Pour cela j'utilise une sous-requête, avec IN:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT pluie
    FROM meteo
    WHERE jour IN (
      SELECT jour
      FROM coursactions
      WHERE nomaction = 'Renault'
        AND valeurfermeture > valeurouverture
    )
    Préférer les jointures à IN !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT m.pluie
    FROM meteo m
    INNER JOIN coursactions c ON c.jour = m.jour
    WHERE c.nomaction = 'Renault'
        AND c.valeurfermeture > c.valeurouverture
    Traduction de la requête :
    "Sélectionner la colonne "pluie" de la table "meteo", jointe à la table "coursaction" sur l'égalité des colonnes "jour" des deux tables, où le nom de l'action est "Renault" et ou la valeur de fermeture est supérieure à la valeur d'ouverture.

  10. #10
    Membre éprouvé
    Inscrit en
    Avril 2008
    Messages
    1 129
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 1 129
    Points : 1 283
    Points
    1 283
    Par défaut
    Merci pour ces traductions sql en français
    C'est si clair pour les débutants comme moi, vu comme ceci

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 13
    Points : 6
    Points
    6
    Par défaut Ok
    Je vais tenter de reessayer sur ce modèle.

    Peut on formaliser la question
    "Quelle est la liste des actions qui montent chaque jour de forte pluie ?" par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT c.nomaction 
    FROM couractions c 
    INNER JOIN meteo m ON m.jour=c.jour 
    WHERE m.jour = forte
       AND cvaleurouverture>cvaleurfermeture
    Normalement comme ca mes deux tables sont liées ? Mais à quoi sert la table ACTIONS ?

    Merci !

  12. #12
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    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 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    "Quelle est la liste des actions qui montent chaque jour de forte pluie ?"
    Attention à la formulation de la question !

    [Jeopardy]
    Votre requête répond à la question suivante :
    "Quelle est la liste des actions qui baissent les jours de forte pluie ?"
    [/Jeopardy]

    Attention aussi à la syntaxe des requêtes !
    Comme vous n'avez pas mis la valeur textuelle entre apostrophes, le SGBD va vouloir comparer la colonne m.jour à une colonne nommée "forte", ne va pas la trouver et vous renverra un message d'erreur !

    Je viens de voir d'ailleurs que j'avais glissé une erreur de syntaxe dans ma requête en collant l'alias "c" aux noms des colonnes "valeurouverture" et "valeurfermeture", erreur que vous avez reproduites !
    J'ai corrigé mon message précédent.

  13. #13
    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 jedebute_et... Voir le message
    Je vais tenter de reessayer sur ce modèle.

    Peut on formaliser la question
    "Quelle est la liste des actions qui montent chaque jour de forte pluie ?" par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT c.nomaction 
    FROM couractions c 
    INNER JOIN meteo m ON m.jour=c.jour 
    WHERE m.jour = forte
       AND cvaleurouverture>cvaleurfermeture
    Cette requête va vous renvoyer les liste des actions ayant monté un jour de forte pluie. Plus précisément, elle va vous renvoyer une ligne par jour de forte pluie et par action ayant monté

    par exemple :
    sur 20 jour, il a plu 10 jours
    Sur ces dix jours, l'action renault a monté 8 fois, les deux autres jours, elle a baissé.
    Votre requete vous donnera 8 lignes 'renault'...

    pour repondre à la question
    Quelle est la liste des actions qui montent chaque jour de forte pluie ?
    Vous pouvez "retourner" le probleme, en cherchant les actions qui ne repondent pas à la question suivante :
    Quelles sont les actions qui n'ont jamais baissé (ou resté stable) un jour de forte pluie

  14. #14
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    ok, pour la syntaxe, je vais faire gaffe !

    Donc si je reprend :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT c.nomaction FROM couraction C
    INNER JOIN meteo m ON m.jour=c.jour
    WHERE m.jour='forte'
    NOT c.valeurouverture<=c.valeurfermeture
    Si je traduit : Sélectionner la colonne nomaction de Couraction jointe à la table Météo. Lister sur les jours de plus forte, les actions sauf celles qui n'ont pas augmenté ou qui sont restées stables.

    je m'arrache les cheveux !!!!

    Merci à vous !

  15. #15
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    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 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT c.nomaction FROM couraction C
    INNER JOIN meteo m ON m.jour=c.jour
    WHERE m.jour='forte'
    NOT c.valeurouverture<=c.valeurfermeture
    Traduction :
    "Sélectionner les actions du jour "forte" pas valeur d'ouverture inférieure ou égale à valeur de fermeture ".

    Si tu veux les actions qui ont monté les jours où il y a eu de la pluie forte, il faut faire cette requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT c.nomaction
    FROM coursaction c
    INNER JOIN meteo m ON m.jour = c.jour
    WHERE m.pluie = 'forte'
      AND c.valeurfermeture > c.valeurouverture
    je m'arrache les cheveux !!!!
    Et encore, tes demandes sont simples !

    Un exemple de ce que j'ai fait récemment :
    "Sélectionner les stages où il reste de la place et dont l'une des disciplines couvertes par le stage correspond à la discipline du concours qu'a obtenu l'étudiant connecté."
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    SELECT ssn.ssn_id, ssn.ssn_code, ssn.ssn_libelle, ssn.ssn_date_debut, ssn.ssn_date_fin, 
                      e.etb_nom, c.cmn_nom, d.dpt_numero 
                FROM te_session_ssn AS ssn 
                INNER JOIN th_stage_stg AS stg ON stg.stg_id_session = ssn.ssn_id 
                      INNER JOIN te_etablissement_etb AS e ON e.etb_id = stg.stg_id_etablissement 
                        INNER JOIN tr_commune_cmn AS c ON c.cmn_id = e.etb_id_commune 
                          INNER JOIN tr_departement_dpt AS d ON d.dpt_id = c.cmn_id_departement 
                      INNER JOIN tj_stg_concerner_dsc_scd AS scd ON scd.scd_id_stage = stg.stg_id_session 
                        INNER JOIN te_discipline_dsc AS dsc ON dsc.dsc_id = scd.scd_id_discipline 
                              INNER JOIN te_concours_ccr AS ccr ON ccr.ccr_id_discipline = dsc_id 
                                INNER JOIN th_etudiant_etu AS etu ON etu.etu_id_concours = ccr.ccr_id 
                WHERE etu.etu_id_candidat = :iduser
                      AND
                      (
                        SELECT COUNT(*)
                        FROM tj_cnd_inscrire_ssn_cis AS cis
                        WHERE cis.cis_id_session = ssn.ssn_id
                      ) < ssn.ssn_capacite
                ORDER BY d.dpt_numero, c.cmn_nom

  16. #16
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Ok,

    je pense que j'ai pas l'esprit assez logique ! Pourtant je me creuse la tete ! Mais entre se souvenir des opérateurs et des nom de table et colonnes ! Pffff !

    Effectivement, en comparaison de la tienne ca parait rien ! Et pourtant !

    Allez je continue ! Peut etre qu'un jour ca me paraitra évident !!!!

    Merci encore !

  17. #17
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    A la question :Quelle est la liste des actions qui montent chaque jour de forte pluie ?
    sur cette requete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    SELECT c.nomaction
    FROM coursaction c
    INNER JOIN meteo m ON m.jour = c.jour
    WHERE m.pluie = 'forte'
      AND c.valeurfermeture > c.valeurouverture
    La notion de chaque n'apparait pas non ? Cette requete ne répond elle pas plutot à une question du type : Quelle est la liste des actions qui montent les jours de forte pluie ?

    Je me complique peut etre mais la j ai un doute !

  18. #18
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    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 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par jedebute_et... Voir le message
    La notion de chaque n'apparait pas non ? Cette requete ne répond elle pas plutot à une question du type : Quelle est la liste des actions qui montent les jours de forte pluie ?
    Effectivement, c'est ce que je disais dans un précédent message.

    S'il y a eu forte pluie les 20 et 21 janvier et que l'action X a monté le 20 mais pas le 21, ta requête va retourner quand même l'action X parce qu'il y a au moins un jour de forte pluie où elle a monté.

    Si tu ne veux que les actions qui ont monté systématiquement lors de chaque jour où il y a eu une forte pluie, cela veut dire qu'il faut compter pour chaque action le nombre de fois où elle a monté quand il y avait forte pluie, puis ne garder que les actions pour lesquelles ce comptage est égal au nombre total de jours de forte pluie.

    Une piste, il faut utiliser COUNT, GROUP BY et HAVING. Ça commence à se compliquer mais il y a des exemples sur le forum ou dans les tutos de SQLPro.

  19. #19
    Membre éprouvé Avatar de Oishiiii
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2009
    Messages
    508
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Août 2009
    Messages : 508
    Points : 1 107
    Points
    1 107
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Une piste, il faut utiliser COUNT, GROUP BY et HAVING. Ça commence à se compliquer mais il y a des exemples sur le forum ou dans les tutos de SQLPro.
    On peut aussi simplement utiliser l'opérateur de différence, INTERSECT.

  20. #20
    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
    ou comme je disais, chercher les actions pour lesquelles il n'existe aucun jour de forte pluie ou elle a baissé...

    quelque chose comme :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SELECT nomaction A
    FROM action
    WHERE NOT EXISTS(
        SELECT *
        FROM COURSACTIONS C
        INNER JOIN METEO M ON M.jour = C.jour
        WHERE M.pluie = 'forte'
        AND C.valeurfermeture <= C.valeurouverture
        AND C.nomaction = A.nomaction
    )

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Problème pour trouver les données commune dans une requête
    Par Winterrage dans le forum Langage SQL
    Réponses: 3
    Dernier message: 08/02/2008, 10h14
  2. Problème pour lier un valeur saisie avec une requête.
    Par jejeapollo dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 10/08/2007, 12h56
  3. Réponses: 4
    Dernier message: 03/05/2007, 20h27
  4. Réponses: 3
    Dernier message: 01/03/2007, 21h54
  5. Cherche la bonne condition sur une requête
    Par Tchupacabra dans le forum Langage SQL
    Réponses: 5
    Dernier message: 08/11/2006, 14h52

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