2009-04-13 3 views
12

Ho due tabelle in MySql azienda: (cname, città) opere: (ename, cname, stipendio)Visualizzazione righe con numero 0 con il gruppo mysql da

voglio visualizzare il numero di dipendenti che lavorano per ogni società, anche se quel numero è zero.

per es. per

Company : 
Microsoft Bangalore 
IBM  NY 

works : 
emp1 Microsoft 10000 
emp2 Microsoft 90000 

uscita dovrebbe essere:

Microsoft 2 
IBM 0 

Ma la seguente query e altre ricerche simili stampare solo quelle aziende che hanno almeno un dipendente:

Select count(*) from works natural join company group by company.cname 

Se uso outer join, quindi le aziende con zero dipendenti mostreranno ancora in una riga, quindi l'opzione è fuori come noi ll.

Come fare?

risposta

22

caso classico per un LEFT JOIN:

SELECT 
    c.cname, 
    COUNT(w.ename) wcount 
FROM 
    company c 
    LEFT JOIN works w ON c.cname = w.cname 
GROUP BY 
    c.cname 
+0

P.S .: Dovresti scaricare NATURAL JOINs. Sembrano essere a portata di mano, ma non sono davvero utili, IMHO. Riducono le tue capacità espressive e fanno implicazioni su come progettare il tuo database (denominazione delle colonne), che è un grande WTF per me. – Tomalak

1

Prova

Select company.cname, count(work.id) from company left join work on ....=.... group by company.cname 

in cui si compila il "...." parti, e cambiare il work.id a voi citarne

0

C'è un altro modo per farlo con subquery, ecco un esempio del mio caso:

select count(`order_id`) as cnt 
from (
    select `order_id` from `room_bookings` 
    where `room_id` = 3 and `day_id` = 20180201 
    group by `order_id` 
) as b;