Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
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, 13h38   #1
Invité de passage
 
Marc
Inscription : février 2011
Messages : 1
Détails du profil
Informations personnelles :
Nom : Marc

Informations forums :
Inscription : février 2011
Messages : 1
Points : 0
Points : 0
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 :
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 :
Annee | Semaine | Nb Search
Requete 2 :
Code :
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 :
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 :
Annee | Semaine | Nb reponses | Nb search

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

Merci d'avance de votre aide.
marcofofo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2011, 08h05   #2
Futur Membre du Club
 
Damien
Inscription : juillet 2009
Messages : 50
Détails du profil
Informations personnelles :
Nom : Damien

Informations forums :
Inscription : juillet 2009
Messages : 50
Points : 16
Points : 16
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 :
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
WibiMaster est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2011, 16h46   #3
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
Question classique ! Au lieu de compter des lignes, il faut additionner des 1 grâce à CASE :
Code :
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 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
Réponse Proposer ce sujet en actualité
Outils de la discussion



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


 
 
 
 
Partenaires

Hébergement Web