Bueno gente les comento las 2 alternativas a las cuales llegue.
Lo comparto porque me queme bastante pensandolo y me funcionaron a la
perfeccion las 2, solo que una tiene 2 select anidados y la otra no.
el modelo lo pueden ver directamente del final, pero se los dejo para
que no tengan que moverse mucho:
EMPRESA
AREA EMPLEADO
id_empresa (pk) id_area
(pk) id_area (pk, fk)
--------------------- id_empresa (pk,
fk) id_empresa (pk, fk)
razon_social
-------------------------- cuit (pk)
presidente detalle
el primer select que hice fue: (notese que no puse los guiones bajos
por cuestiones de comodidad)
select e.idempresa, count(distinct(a.idarea)), count(c.idpais)
from empresa as e, area as a, empleado as em
where e.id_empresa = a.id_empresa
AND a.idarea *= em.idarea
AND a.idempresa = em.idempresa
group by e.idempresa
having NOT EXISTS ( select 1 from area as a2
where a2.idempresa = e.idempresa
AND ( select count(*) from empleados as em2
where a2.idarea = em2.idarea AND a2.idempresa = em2.idempresa
) > 10
)
Ahora bien, despues de un rato de limarme, y pensar en alguna forma de
eliminar el select anidado que a mucha gente le cae mal, pude obtener
los mismos resultados, remplazando el having por este
/** lo mismo de arriba hasta el having ** /
having 10 >= ALL ( select count(a2.idarea) from area as a2
where a2.idempresa = e.idempresa
group by a2.idarea )
Al agregar el group by, me devuelve la cantidad de empleados por cada
area, aplicando 10 >= ALL a todo el resultado del select, se filtran
todas aquellas empresas que no tienen ningun area con mas de 10
empleados.
Espero que a alguien le sirva, mas alla del ejercicio en si, esta
bueno ver varias alternativas ante un problema, quiza alguien le salio
de otra forma, estaria bueno que lo compartan.
Saludos!!
Matias.