Foro de elhacker.net

Programación => Bases de Datos => Mensaje iniciado por: [u]nsigned en 8 Diciembre 2011, 21:56 pm



Título: Como hacer esta consulta??
Publicado por: [u]nsigned en 8 Diciembre 2011, 21:56 pm
Hola, tengo dos tablas. Una es la tabla oficinas la cual contiene un listado de oficinas, con su correspondiente id y nombre:

(http://img408.imageshack.us/img408/2748/tablaoficinas.jpg)

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

(http://img267.imageshack.us/img267/3252/tablaordenadores.jpg)

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:

(http://img542.imageshack.us/img542/851/consulta.jpg)

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

Saludos


Título: Re: Como hacer esta consulta??
Publicado por: Stoya en 8 Diciembre 2011, 22:22 pm
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
  1. SELECT o.id, o.oficina, c.ords FROM oficinas AS o JOIN
  2. (SELECT ord.id_oficina, COUNT(id) FROM ordenadores AS ord GROUP BY ord.id_oficina) AS c
  3. ON c.id_oficina = o.id;


Título: Re: Como hacer esta consulta??
Publicado por: [u]nsigned en 12 Diciembre 2011, 14:16 pm
@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


Título: Re: Como hacer esta consulta??
Publicado por: Stoya en 14 Diciembre 2011, 03:35 am
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.


Título: Re: Como hacer esta consulta??
Publicado por: cassiani en 14 Diciembre 2011, 22:33 pm
Puedes hacer algo así

Código
  1. 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
  2. GROUP BY oficina ORDER BY total DESC;
  3. +------------------+------------+-------------------+-------+
  4. | oficina          | fabricante | sistema_operativo | total |
  5. +------------------+------------+-------------------+-------+
  6. | servicio tecnico | hp         | ubuntu            |     3 |
  7. | despacho         | ibm        | windows xp        |     2 |
  8. | contaduria       | dell       | windows 7         |     1 |
  9. +------------------+------------+-------------------+-------+
  10.  


Título: Re: Como hacer esta consulta??
Publicado por: |Miguel| en 22 Diciembre 2011, 14:01 pm
Si usas Oracle...

Código
  1. SELECT O.ID, O.NOMBRE, COUNT(*) N_PCs
  2.   FROM OFICINAS O, ORDENADORES OR
  3.   WHERE O.ID=OR.ID(+)
  4.   GROUP BY O.ID, O.NOMBRE;