necesito ayuda con este SELECT en sql
hola!
tengo estas 3 tablas:
1) "region" que contiene los campos: id_region y nombre_region
2)"persona" que contiene los campos: id_persona, id_region(fk) y nombre_persona
3)"inscripcion" que contiene los campos:id_persona(fk), id_inscripcion y dias_inscrito
una persona puede estar inscrita en varias listas de inscripcion.
una persona pertenece s贸lo a una region.
necesito hacer un select que me entregue el nombre de la region que tiene m谩s personas inscritas. he tratado varios pero no lo consigo, alguna idea?, gracias.
b.
tengo estas 3 tablas:
1) "region" que contiene los campos: id_region y nombre_region
2)"persona" que contiene los campos: id_persona, id_region(fk) y nombre_persona
3)"inscripcion" que contiene los campos:id_persona(fk), id_inscripcion y dias_inscrito
una persona puede estar inscrita en varias listas de inscripcion.
una persona pertenece s贸lo a una region.
necesito hacer un select que me entregue el nombre de la region que tiene m谩s personas inscritas. he tratado varios pero no lo consigo, alguna idea?, gracias.
b.
No s茅 si has resuelto ya el problema, pero por si acaso, prueba esto:
SELECT id_region, Count(*) FROM Persona
WHERE id_persona IN (SELECT id_persona FROM Inscripcion)
GROUP BY id_region
Esto devuelve cada regi贸n con el n煤mero de personas que tienen alguna inscripci贸n.
Saludos.
SELECT id_region, Count(*) FROM Persona
WHERE id_persona IN (SELECT id_persona FROM Inscripcion)
GROUP BY id_region
Esto devuelve cada regi贸n con el n煤mero de personas que tienen alguna inscripci贸n.
Saludos.
una persona puede no estar inscrita?
prueba con:
select nombre_region from region where id_region =(
select id_region
from inscripcion i, persona p
where i.id_persona=p.id_persona
group by id_region
having count(*)=(select max(count(*)) from inscripcion i, persona p
where i.id_persona=p.id_persona
group by id_region))
prueba con:
select nombre_region from region where id_region =(
select id_region
from inscripcion i, persona p
where i.id_persona=p.id_persona
group by id_region
having count(*)=(select max(count(*)) from inscripcion i, persona p
where i.id_persona=p.id_persona
group by id_region))
Haber con esas tres tablas, la que te interesa es persona:
SELECT count(id_persona), id_region FROM persona
GROUP BY id_region
eso te devolvera la cuenta de personas por region
Un saludo
Skakeo庐
SELECT count(id_persona), id_region FROM persona
GROUP BY id_region
eso te devolvera la cuenta de personas por region
Un saludo
Skakeo庐
hola, lamentablemente el c贸digo que me sugirieron no funcion贸 como yo quiero, el problema es que hay una persona "x" inscrita en 2 listas con lo cual el select devuelve como la regi贸n con m谩s inscritos la regi贸n donde est谩 esa persona "x". como sea he pensado en una nueva soluci贸n, he tenido que cambiar los nombres de las tablas pero lo dem谩s sigue igua, imagina que regi贸n ahora se llama "departamento", persona se llama "empleado" y inscripcion se llama "empleado_proyecto". siempre sigo buscando el departamento (en este caso) con m谩s empleados trabajando en proyectos.
hago el siguiente select:
select departamento.nombre_depto, empleado_proyecto.rut_empleado
from departamento ,empleado_proyecto ,empleado
where departamento.codigo_depto=empleado.codigo_depto and
empleado.rut_empleado=empleado_proyecto.rut_empleado
group by departamento.nombre_depto, empleado_proyecto.rut_empleado;
y obtengo esto (rut_empleado equivale a id.persona):
NOMBRE_DEPTO RUT_EMPLEADO
------------------------------ ------------
Finanzas 08.897.030-6
Finanzas 15.598.407-4
Personal 15.133.744-9
hasta ac谩 todo bien pues en verdad Finanzas es el departamento con m谩s empleados trabajando en proyectos, pero debo hacer un select que s贸lo muestre "Finanzas" como salida. pues bien, modifico el select:
select nombre_depto, count(ep) from(
select departamento.nombre_depto, empleado_proyecto.rut_empleado ep
from departamento ,empleado_proyecto ,empleado
where departamento.codigo_depto=empleado.codigo_depto and
empleado.rut_empleado=empleado_proyecto.rut_empleado
group by departamento.nombre_depto, empleado_proyecto.rut_empleado)
group by nombre_depto;
y obtengo lo siguiente:
NOMBRE_DEPTO COUNT(EP)
------------------------------ ----------
Finanzas 2
Personal 1
lo cual est谩 muy bien ya que efectivamente en Finanzas hay 2 empleados y en Personal s贸lo una. ahora modifico otra vez el select para que me muestre s贸lo "Personal":
1er intento:
select nombre_depto, max(count(ep)) from(
select departamento.nombre_depto, empleado_proyecto.rut_empleado ep
from departamento ,empleado_proyecto ,empleado
where departamento.codigo_depto=empleado.codigo_depto and
empleado.rut_empleado=empleado_proyecto.rut_empleado
group by departamento.nombre_depto, empleado_proyecto.rut_empleado)
group by nombre_depto;
la salida es:
SQL> /
select nombre_depto, max(count(ep)) from(
*
ERROR at line 1:
ORA-00937: not a single-group group function
ok, 2潞 intento:
select nombre_depto, max(cd) from(
select nombre_depto, count(ep) cd from(
select departamento.nombre_depto, empleado_proyecto.rut_empleado ep
from departamento ,empleado_proyecto ,empleado
where departamento.codigo_depto=empleado.codigo_depto and
empleado.rut_empleado=empleado_proyecto.rut_empleado
group by departamento.nombre_depto, empleado_proyecto.rut_empleado)
group by nombre_depto)
group by nombre_depto;
pero la salida sigue siendo:
NOMBRE_DEPTO MAX(CD)
------------------------------ ----------
Finanzas 2
Personal 1
y creo que es porque la persona "x" que est谩 en 2 proyectos est谩 en el departamento Personal y de alguna forma el select considera que Personal tiene 2 empleados cuando s贸lo tiene uno pero repetido en 2 proyectos (los empleados de Finanzas s贸lo est谩n en un proyecto cada uno).
bueno, tienen alguna idea para conseguir una manera que el select me entregue esta salida?:
NOMBRE_DEPTO
------------------------------
Finanzas
eso es todo lo que necesito, obtener el nombre del departamento con mas empleados trabajando en algun proyecto.
gracias de antemano, cualquier idea me sirve.
saludos.
.
hago el siguiente select:
select departamento.nombre_depto, empleado_proyecto.rut_empleado
from departamento ,empleado_proyecto ,empleado
where departamento.codigo_depto=empleado.codigo_depto and
empleado.rut_empleado=empleado_proyecto.rut_empleado
group by departamento.nombre_depto, empleado_proyecto.rut_empleado;
y obtengo esto (rut_empleado equivale a id.persona):
NOMBRE_DEPTO RUT_EMPLEADO
------------------------------ ------------
Finanzas 08.897.030-6
Finanzas 15.598.407-4
Personal 15.133.744-9
hasta ac谩 todo bien pues en verdad Finanzas es el departamento con m谩s empleados trabajando en proyectos, pero debo hacer un select que s贸lo muestre "Finanzas" como salida. pues bien, modifico el select:
select nombre_depto, count(ep) from(
select departamento.nombre_depto, empleado_proyecto.rut_empleado ep
from departamento ,empleado_proyecto ,empleado
where departamento.codigo_depto=empleado.codigo_depto and
empleado.rut_empleado=empleado_proyecto.rut_empleado
group by departamento.nombre_depto, empleado_proyecto.rut_empleado)
group by nombre_depto;
y obtengo lo siguiente:
NOMBRE_DEPTO COUNT(EP)
------------------------------ ----------
Finanzas 2
Personal 1
lo cual est谩 muy bien ya que efectivamente en Finanzas hay 2 empleados y en Personal s贸lo una. ahora modifico otra vez el select para que me muestre s贸lo "Personal":
1er intento:
select nombre_depto, max(count(ep)) from(
select departamento.nombre_depto, empleado_proyecto.rut_empleado ep
from departamento ,empleado_proyecto ,empleado
where departamento.codigo_depto=empleado.codigo_depto and
empleado.rut_empleado=empleado_proyecto.rut_empleado
group by departamento.nombre_depto, empleado_proyecto.rut_empleado)
group by nombre_depto;
la salida es:
SQL> /
select nombre_depto, max(count(ep)) from(
*
ERROR at line 1:
ORA-00937: not a single-group group function
ok, 2潞 intento:
select nombre_depto, max(cd) from(
select nombre_depto, count(ep) cd from(
select departamento.nombre_depto, empleado_proyecto.rut_empleado ep
from departamento ,empleado_proyecto ,empleado
where departamento.codigo_depto=empleado.codigo_depto and
empleado.rut_empleado=empleado_proyecto.rut_empleado
group by departamento.nombre_depto, empleado_proyecto.rut_empleado)
group by nombre_depto)
group by nombre_depto;
pero la salida sigue siendo:
NOMBRE_DEPTO MAX(CD)
------------------------------ ----------
Finanzas 2
Personal 1
y creo que es porque la persona "x" que est谩 en 2 proyectos est谩 en el departamento Personal y de alguna forma el select considera que Personal tiene 2 empleados cuando s贸lo tiene uno pero repetido en 2 proyectos (los empleados de Finanzas s贸lo est谩n en un proyecto cada uno).
bueno, tienen alguna idea para conseguir una manera que el select me entregue esta salida?:
NOMBRE_DEPTO
------------------------------
Finanzas
eso es todo lo que necesito, obtener el nombre del departamento con mas empleados trabajando en algun proyecto.
gracias de antemano, cualquier idea me sirve.
saludos.
.
