Aide en SQL

Résolu/Fermé
juloo6578 Messages postés 52 Date d'inscription vendredi 27 avril 2012 Statut Membre Dernière intervention 28 janvier 2013 - Modifié par juloo6578 le 28/01/2013 à 21:15
Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 - 30 janv. 2013 à 09:34
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


A voir également:

1 réponse

Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
29 janv. 2013 à 09:42
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
Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
30 janv. 2013 à 09:34
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