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 :

"Jointure" de requetes


Sujet :

Requêtes MySQL

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Février 2011
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 1
    Points : 1
    Points
    1
    Par défaut "Jointure" de requetes
    Bonjour,
    Avec mes modestes compétences en SQL, j'ai écris 2 requetes distinctes basées sur un count *:

    Requete 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT year(`date`) "Annee",
           week(`date`) "Semaine",
           count(*) "Nb searchs"
    FROM `logs` 
    WHERE `areaId`="Lyon" and 
           year(`date`)>= "2011" and
          `eventType` in (2,4)
    GROUP BY year(`date`),
             week(`date`)
    qui donne un résultat avec 3 colonnes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Annee | Semaine | Nb Search
    Requete 2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT year(`date`) "Annee",
           week(`date`) "Semaine",
           count(*) "Nb reponses"
    FROM `logs` 
    WHERE `areaId`="Lyon" and 
           year(`date`)>= "2011" and
          `eventType` in (3,5)
    GROUP BY year(`date`),
             week(`date`)
    qui donne un résultat avec 3 colonnes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Annee | Semaine | Nb reponses
    Ce que je voudrais obtenir, ce sont les mêmes données sous 1 seul tableau (et donc à partir d'une seule requête)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Annee | Semaine | Nb reponses | Nb search

    Auriez-vous une idée s'il vous plaît?

    Merci d'avance de votre aide.

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 56
    Points : 36
    Points
    36
    Par défaut
    Le problème pour faire un LEFT JOIN ici, ça va être le "eventType" qui change.. Mais c'est peut être possible.

    Sinon, à essayer :

    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
    SELECT year(`date`) "Annee",
           week(`date`) "Semaine",
           count(*) "Nb searchs",
           (
                  SELECT count(*)
                  FROM logs
                  WHERE `areaId`="Lyon" AND 
                         year(`date`)>= "2011" AND
                        `eventType` IN (3,5)
                  GROUP BY year(`date`),
                           week(`date`)
           ) AS "Nb reponses"
    FROM `logs` 
    WHERE `areaId`="Lyon" AND 
           year(`date`)>= "2011" AND
          `eventType` IN (2,4)
    GROUP BY year(`date`),
             week(`date`)
    Je suis pas sûr que le GROUP BY passe dans la sous-requête, mais tu peux toujorus voir si ça tourne

  3. #3
    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 : 60
    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 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Question classique ! Au lieu de compter des lignes, il faut additionner des 1 grâce à CASE :
    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
    20
    SELECT     
        year(`date`) AS Annee,
        week(`date`) AS Semaine,
        SUM (
            CASE
                WHEN eventType IN (2,4) THEN 1
                ELSE 0
            END
        ) AS Nb_searchs,
        SUM (
            CASE
                WHEN eventType IN (3,5) THEN 1
                ELSE 0
            END
        ) AS Nb_reponses
    FROM logs
    WHERE areaId = 'Lyon'
        AND year(`date`) >= 2011 
    GROUP BY year(`date`),
             week(`date`)
    Au passage :
    1) En SQL, les valeurs textuelles s'écrivent entre apostrophes et pas entre guillemets !
    2) Appeler une colonne "date" est une mauvaise idée car c'est un mot réservé du langage SQL !
    3) La fonction YEAR renvoie un entier dont inutile de comparer à une chaîne de caractères !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « 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 !

Discussions similaires

  1. jointure entre deux requete
    Par Youssef dans le forum Langage SQL
    Réponses: 21
    Dernier message: 15/01/2004, 15h13

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