Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1391 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  1 requete SQL avec deux Requete Distincte

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

1 requete SQL avec deux Requete Distincte

n°2087549
neo-blaste​r
Posté le 06-07-2011 à 13:39:58  profilanswer
 

Bonjour,
 
Présentation du contexte:
 
J'ai une seule TABLE du nom de JOURNAL
Les champs sont: USERNAME, COMPUTERNAME, IP, LOGON et LOGOFF
Je travail avec MySQL en ligne de commande sous windows avec WAMPSERVER.
 
Je souhaite en faite:
- Calculer le nombre de connexion effectuer par machine: sachant qu'une entrée dans la base correspond a une connexion.
 
SELECT Computername, COUNT(*) AS Nb_connexion FROM journal GROUP BY Computername;
 
j'obtient: (valeur fictive)
 
#-----------------------#------------------------#
|       Computername       |          Nb_connexion     |
#-----------------------#------------------------#
|       Machine 1             |                 123            |
|       Machine 2             |                 234            |
|       Machine 3             |                 345            |
#-----------------------#------------------------#
 
Et je souhaite également compter le nombre de machine qui ne sont pas parvenue a se deconnecter correctement.
Je l'identifie grace a un marqueur 'N/A' qui correspond a Not Avable soit non disponible. Sinon c'est une date au format AAAA/MM/JJ - hh:mm:ss:mmm
 
La requete est simple:
 
SELECT Computername, COUNT(Logoff) AS Nb_bug FROM journal WHERE Logoff='N/A' GROUP BY Computername;
 
j'obtient: (valeur fictive)
 
#-----------------------#------------------------#
|       Computername       |          Nb_bug              |
#-----------------------#------------------------#
|       Machine 1             |                 1               |
|       Machine 2             |                 2               |
|       Machine 3             |                 3               |
#-----------------------#------------------------#
 
Miantenant,n et c'est la ou je n'arrive pas a écrire la requete:
Je souhaite avoir un tableau qui se présente sous la forme:
 
#-----------------------#------------------------#---------------------#
|       Computername       |          Nb_bug              |    Nb_connexion        |
#-----------------------#------------------------#---------------------#
|       Machine 1             |                 1               |             123             |
|       Machine 2             |                 2               |             234             |
|       Machine 3             |                 3               |             345             |
#-----------------------#------------------------#---------------------#
 
J'ai tenter:
 
SELECT Computername, COUNT(*) AS Nb_connexion FROM journal GROUP BY Computername
UNION
SELECT Computername, COUNT(Logoff) AS Nb_bug FROM journal WHERE Logoff='N/A' GROUP BY Computername;
 
 
J'obtient :
#-----------------------#------------------------#
|       Computername       |          Nb_bug              |
#-----------------------#------------------------#
|       Machine 1             |                   1             |
|       Machine 2             |                   2             |
|       Machine 3             |                   3             |
|       Machine 1             |                 123            |
|       Machine 2             |                 234            |
|       Machine 3             |                 345            |
#-----------------------#------------------------#
 
j'ai tenté d'autre truc mais j'obtient les meme compte pour les bug et le nombre de connexion.
 
je souhaite avoir le nombre de bug et le nombre de connexion afin d'en faire des statistiques.
Par exemple un pc qui a bugé 10 fois pour 100 connexion (taux= 10% de bug) est plus "performant" qu'un pc qui a bugé 10 fois pour 50 connexion (taux=50% de bug).
 
avez vous des idées???
 
je n'y arrive pas...
 
Au pire des cas je pense etre capable de le faire en PHP mais c'est un programme, plus une requete.
 
Merci bcp pour votre aide


Message édité par neo-blaster le 06-07-2011 à 14:09:20
mood
Publicité
Posté le 06-07-2011 à 13:39:58  profilanswer
 

n°2087566
neo-blaste​r
Posté le 06-07-2011 à 14:11:03  profilanswer
 

je peux pas regrouper le tout dans un SELECT car la clause WHErE sera appliquer a mes deux attribut alors que les conditions sont diférente.

n°2087697
lasnoufle
La seule et unique!
Posté le 06-07-2011 à 17:51:53  profilanswer
 

Spa un join qu'il te faut tout simplement?

select a.Computername, a.Nb_connexion, b.Nb_bug
from (SELECT Computername, COUNT(*) AS Nb_connexion FROM journal GROUP BY Computername) a
left outer join (SELECT Computername, COUNT(Logoff) AS Nb_bug FROM journal WHERE Logoff='N/A' GROUP BY Computername) b on a.Computername = b.Computername;


Edit: connais pas la syntaxe MySQL mais bon tu vois l'idée


Message édité par lasnoufle le 06-07-2011 à 17:54:25

---------------
C'était vraiment très intéressant.
n°2087753
neo-blaste​r
Posté le 06-07-2011 à 20:33:15  profilanswer
 

je vais essayer je vous tien au courant, je ne suis pas au boulot pour le moment ^^

n°2087804
neo-blaste​r
Posté le 07-07-2011 à 08:12:56  profilanswer
 

Excellent, ça marche !!!
Impressionnant !!Merci beacoup Lasnoufle.
Je voulais juste te demander quelque explication sur 'LEFT OUTER JOIN' afin de mieux comprendre son fonctionnement !!
A la fin on a ON a.Computername = b.Computername. Ce sont les conditions de l'union?
Re merci !

n°2090154
lasnoufle
La seule et unique!
Posté le 19-07-2011 à 13:20:04  profilanswer
 

neo-blaster a écrit :

Excellent, ça marche !!!
Impressionnant !!Merci beacoup Lasnoufle.
Je voulais juste te demander quelque explication sur 'LEFT OUTER JOIN' afin de mieux comprendre son fonctionnement !!
A la fin on a ON a.Computername = b.Computername. Ce sont les conditions de l'union?
Re merci !


Oups pardon j'étais plus là. Y a rien d'impressionnant c'est du SQL de base... Tu dois pouvoir trouver facilement des cours ou de la doc SQL en ligne si ca t'intéresse.
Oui le ON donne les conditions de l'union.
LEFT OUTER JOIN c'est pour ne pas éliminer les lignes qui ne matcheraient pas la condition: si tu mets juste JOIN et que tu as un computername dans "a" qui n'existe pas dans "b", ben ce computername sera "éliminé" dans le join parce que non matché dans "b".
Si tu mets LEFT OUTER JOIN (me souviens meme plus si LEFT et OUTER sont vraiment tous les deux utiles, p'tetre qu'un seul suffirait), le computername sera toujours présent dans le résultat, avec des valeurs nulles pour les champs qu'il "aurait du" récupérer de "b".


---------------
C'était vraiment très intéressant.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  1 requete SQL avec deux Requete Distincte

 

Sujets relatifs
Problème avec tables SQL et TIMESTAMP !Conseil aide requete sql
Excel et SQL requete avec deux condition?You have an error in your SQL syntax; check the manual that correspond
Bloqué sur des requetes SQL basiques dans Accessproblème (opérateur manquant) dans Requete SQL sous Excel VBA
Requête avec jointure et multiples conditionsHelp requête SQL
Plus de sujets relatifs à : 1 requete SQL avec deux Requete Distincte


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR