Como hacer esta consulta??

Iniciado por [u]nsigned, 8 Diciembre 2011, 21:56 PM

0 Miembros y 1 Visitante están viendo este tema.

[u]nsigned

Hola, tengo dos tablas. Una es la tabla oficinas la cual contiene un listado de oficinas, con su correspondiente id y nombre:



La otra es la tabla ordenadores la cual contiene el id, el fabricante y la oficina (id_oficina) a la que pertenece el ordenador:



Como habran notado la relacion entre ambas tablas esta dada por oficinas.id y ordenadores.id_oficina

Mi probemas es el siguinte. Deseo obtener un consulta la cual me liste todas las oficinas (con su id y nombre) y ademas me indique cual es la cantidad de ordenadores en dicha oficina, inclusi si dicha cantidad e cero (0), tal como se ve en la siguinte imagen:



No logro usar la visualizar como usar GROUP BY / COUNT de MySQL para obtener este resultado..alguien podria darme una manito?

Saludos

No hay atajo ante la duda, el misterio se hace aquí...
Se hace carne en cada uno, el misterio es existir!

Stoya

Ahí tienes la manita, no sé si funciona, no lo he probado, si no funciona, te toca arreglarlo a ti, pero debería haberte dado la idea al menos.

Código (sql) [Seleccionar]
select o.id, o.oficina, c.ords from oficinas as o join
(select ord.id_oficina, count(id) from ordenadores as ord group by ord.id_oficina) as c
on c.id_oficina = o.id;

[u]nsigned

@Stoya gracias por tu respuesta, pero desgraciadamente no me sirve, porque asi solo me devuelve las oficinas que tienen un ordenador asignado, y yo quiero que me muestre todas, inclusive las que no tienen ninguno...alguna sugerencia mas?

Esto me esta frenando un proyecto entero. Podria ejecutar otra consulta en PHP para recuperar el numero de ordenadores asignados por oficina (en caso de que tuviera) y luego combinarlo, pero la idea es llevar toda la logica de datos a MySQL  :P

Saludos

No hay atajo ante la duda, el misterio se hace aquí...
Se hace carne en cada uno, el misterio es existir!

Stoya

Te toca hacer un select más, de todas las oficinas, restarle las que sí tienen ordenadores (que ya sabes cuáles son), y añadirle la columna de la cuenta con los ceros, con eso haces la unión con la subconsulta que te he dado.

Ahora aprende SQL y hazlo.

cassiani

Puedes hacer algo así

Código (sql) [Seleccionar]
select ofi.oficina,o.fabricante,o.sistema_operativo,count(*) as total from ordenadores as o join oficinas as ofi on o.id_oficina=ofi.id_oficina
group by oficina order by total desc;
+------------------+------------+-------------------+-------+
| oficina          | fabricante | sistema_operativo | total |
+------------------+------------+-------------------+-------+
| servicio tecnico | hp         | ubuntu            |     3 |
| despacho         | ibm        | windows xp        |     2 |
| contaduria       | dell       | windows 7         |     1 |
+------------------+------------+-------------------+-------+


|Miguel|

Si usas Oracle...

Código (sql) [Seleccionar]
SELECT O.ID, O.NOMBRE, COUNT(*) N_PCs
   FROM OFICINAS O, ORDENADORES OR
   WHERE O.ID=OR.ID(+)
   GROUP BY O.ID, O.NOMBRE;