2009-04-13 23 views
12

Tengo dos tablas en MySQL Empresa: (CNAME, ciudad) obras: (ename, CNAME, sueldo)Viendo filas con 0 Cuenta con el grupo mysql por

que quiero mostrar el número de empleados que trabajan para cada compañía, , incluso si ese número es cero.

por ej. para

salida
Company : 
Microsoft Bangalore 
IBM  NY 

works : 
emp1 Microsoft 10000 
emp2 Microsoft 90000 

debería ser:

Microsoft 2 
IBM 0 

Pero la siguiente consulta y otras frases semejantes imprimir sólo aquellas empresas que tienen al menos un empleado:

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

Si uso combinación externa, entonces las compañías con cero empleados mostrarán en una fila, por lo que esa opción está desactivada ya que ll.

¿Cómo hacerlo?

Respuesta

22

caso clásico de 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 .: Debería descargar NATURAL JOINs. Parecen ser útiles, pero en realidad no son útiles, en mi humilde opinión. Disminuyen sus capacidades expresivas y hacen implicaciones sobre cómo diseñar su base de datos (denominación de columna), que es una gran WTF para mí. – Tomalak

1

Trate

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

donde llenar las partes "....", y cambiar el nombre work.id a que

0

Hay otra manera de hacerlo con subconsulta, aquí hay una muestra de mi 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;