Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/02/2011, 18h58   #1
Invité de passage
 
Inscription : février 2011
Messages : 13
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 13
Points : 1
Points : 1
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 :
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 !
jedebute_et... est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2011, 19h18   #2
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 684
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 684
Points : 10 459
Points : 10 459
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
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.
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2011, 19h31   #3
Membre chevronné
 
Avatar de Oishiiii
 
Administrateur de base de données
Inscription : août 2009
Messages : 404
Détails du profil
Informations personnelles :
Âge : 24

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

Informations forums :
Inscription : août 2009
Messages : 404
Points : 643
Points : 643
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 :
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 :
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 :
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.
Oishiiii est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2011, 19h44   #4
Invité de passage
 
Inscription : février 2011
Messages : 13
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 13
Points : 1
Points : 1
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 :
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 !
jedebute_et... est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2011, 19h46   #5
Invité de passage
 
Inscription : février 2011
Messages : 13
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 13
Points : 1
Points : 1
Et merci encore Oishiiii !

Les 3 grandes étapes colorisée me font paraître la question plus claire !
jedebute_et... est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2011, 20h00   #6
Membre chevronné
 
Avatar de Oishiiii
 
Administrateur de base de données
Inscription : août 2009
Messages : 404
Détails du profil
Informations personnelles :
Âge : 24

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

Informations forums :
Inscription : août 2009
Messages : 404
Points : 643
Points : 643
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 :
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 *.
Oishiiii est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2011, 20h14   #7
Invité de passage
 
Inscription : février 2011
Messages : 13
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 13
Points : 1
Points : 1
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 !
jedebute_et... est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2011, 20h33   #8
Membre chevronné
 
Avatar de Oishiiii
 
Administrateur de base de données
Inscription : août 2009
Messages : 404
Détails du profil
Informations personnelles :
Âge : 24

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

Informations forums :
Inscription : août 2009
Messages : 404
Points : 643
Points : 643
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 :
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;
Oishiiii est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2011, 11h21   #9
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 993
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 10 993
Points : 18 246
Points : 18 246
Envoyer un message via MSN à CinePhil
Citation:
Envoyé par Oishiiii
Pour cela j'utilise une sous-requête, avec IN:
Code :
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 :
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.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2011, 11h38   #10
Membre éprouvé
 
Inscription : avril 2008
Messages : 554
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 554
Points : 402
Points : 402
Merci pour ces traductions sql en français
C'est si clair pour les débutants comme moi, vu comme ceci
zouzoukha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2011, 11h47   #11
Invité de passage
 
Inscription : février 2011
Messages : 13
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 13
Points : 1
Points : 1
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 :
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 !
jedebute_et... est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2011, 12h22   #12
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 993
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 10 993
Points : 18 246
Points : 18 246
Envoyer un message via MSN à CinePhil
Citation:
"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.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2011, 12h24   #13
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
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 :
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
Citation:
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 :
Citation:
Quelles sont les actions qui n'ont jamais baissé (ou resté stable) un jour de forte pluie
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2011, 16h03   #14
Invité de passage
 
Inscription : février 2011
Messages : 13
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 13
Points : 1
Points : 1
ok, pour la syntaxe, je vais faire gaffe !

Donc si je reprend :

Code :
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 !
jedebute_et... est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2011, 16h40   #15
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 993
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 10 993
Points : 18 246
Points : 18 246
Envoyer un message via MSN à CinePhil
Code :
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 :
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
Citation:
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 :
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
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2011, 18h00   #16
Invité de passage
 
Inscription : février 2011
Messages : 13
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 13
Points : 1
Points : 1
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 !
jedebute_et... est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2011, 20h10   #17
Invité de passage
 
Inscription : février 2011
Messages : 13
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 13
Points : 1
Points : 1
A la question :Quelle est la liste des actions qui montent chaque jour de forte pluie ?
sur cette requete :

Code :
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 !
jedebute_et... est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2011, 09h09   #18
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 993
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 10 993
Points : 18 246
Points : 18 246
Envoyer un message via MSN à CinePhil
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.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2011, 09h45   #19
Membre chevronné
 
Avatar de Oishiiii
 
Administrateur de base de données
Inscription : août 2009
Messages : 404
Détails du profil
Informations personnelles :
Âge : 24

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

Informations forums :
Inscription : août 2009
Messages : 404
Points : 643
Points : 643
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.
Oishiiii est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2011, 11h15   #20
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
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 :
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
)
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h24.


 
 
 
 
Partenaires

Hébergement Web