Aide en SQL

Résolu
juloo6578 Messages postés 57 Statut Membre -  
Reivax962 Messages postés 3742 Statut Membre -
Bonjour,

Je souhaite effectuer un requête un peut particulière dont je ne trouve pas la solution

Les données sont enregistrées dans la table comme ceci :

envoyeur     receveur   
juloo6578    maxPain   
juloo6578    Hubert   
Hubert      maxPain   
maxPain     juloo6578   
Hubert     juloo6578   
juloo6578   maxPain


La requête doit renvoyer le nombre d'occurrence d'une chaîne de caractères dans 'envoyeur' et le nombre d'occurrence de cette même chaîne de caractère dans receveur
Cette chaîne de caractère représenterais le nom de l'utilisateur.

exemple :
Utilisateur  Envoyé  Recu      
juloo6578     3     2      
maxPain       1     3   
Hubert        2     1


1 réponse

  1. Reivax962 Messages postés 3742 Statut Membre 1 011
     
    Bonjour,

    En une seule requête obligatoirement ?

    Dans ce cas, tu peux essayer ça :
    select t.nom, coalesce(envoyeur, 0) as envoyé, coalesce(receveur, 0) as reçu
    from (
        select distinct envoyeur as nom from table
        union
        select distinct receveur from table
    ) t
    left outer join
    (
        select receveur, count(*) from table group by receveur
    ) rec ON rec.receveur = t.nom
    left outer join
    (
        select envoyeur, count(*) from table group by envoyeur
    ) env ON env.envoyeur = t.nom
    

    Y a peut-être plus simple... Mais je n'ai rien sous la main pour tester.

    Xavier
    0
    1. Reivax962 Messages postés 3742 Statut Membre 1 011
       
      Je me suis mélangé dans mes noms de colonne.
      Ceci devrait être mieux :
      select t.nom, coalesce(env.nb, 0) as envoyé, coalesce(rec.nb, 0) as reçu
      from (
          select distinct envoyeur as nom from table
          union
          select distinct receveur from table
      ) t
      left outer join
      (
          select receveur, count(*) as nb from table group by receveur
      ) rec ON rec.receveur = t.nom
      left outer join
      (
          select envoyeur, count(*) as nb from table group by envoyeur
      ) env ON env.envoyeur = t.nom
      0