Question

J'ai deux tables:

Sociétés: (identifiant, nom)

Travailleurs: (identifiant, nom, pays)

Je voudrais obtenir toutes les entreprises et les trier par nombre d'employés d'un pays donné.

Pour une requête à la recherche d'entreprises ayant plus d'employés en provenance des États-Unis, le résultat devrait donner:

#workers from USA | company id | company name 
----------------------------------------------
        90              6           foo corp     
        45              9           bar corp     
        0               3         foobar corp    

j'ai essayé:

select 
    count(w.country='USA') as mycount,
    w.company_id,
    c.company_name
from 
    companies c 
    left join workers w on 
        c.id=w.company_id 
group by 
    w.company_id,
    c.company_name
order by mycount desc;

Mais c'est compter tous les travailleurs indépendamment de leur pays.

Des idées?

Était-ce utile?

La solution

Vous pouvez le faire facilement avec une sous-requête corrélée:

SELECT
  (SELECT count(*) FROM workers w WHERE w.company_id=c.id AND w.country='USA') AS mycount,
  c.id,
  c.company_name
FROM
  companies c
ORDER BY mycount DESC

Autres conseils

Est-ce que le remplacement de COUNT (w.country = 'USA') par COUNT (*) vous aide? Je pense que votre requête doit faire référence à des champs de la table Sociétés et non à des travailleurs, car votre jointure gauche laisse ouverte la possibilité que l'ensemble des travailleurs sélectionnés pour une entreprise / un pays spécifique soit l'ensemble vide.

Essayez:

select count(*) as mycount,
       c.company_id,
       c.company_name
from   companies c
left join workers w on c.id=w.company_id 
group by c.company_id, c.company_name
order by mycount desc;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top