Problema Multiplicación Total Departamentos Consultas SQL

  • Autor Autor QuesoConJamon
  • Fecha de inicio Fecha de inicio

QuesoConJamon

Gamma
Verificación en dos pasos activada
Verificado por Whatsapp
¡Ha verificado su Paypal!
Verificado por Binance
Tengo el siguiente select

Insertar CODE, HTML o PHP:
select e.EDI_NOMBRE_EDIFICIO AS "NOMBRE EDIFICIO", c.nombre_comuna AS COMUNA, to_char(a.adm_numrun,'99g999g999') ||'-'|| a.adm_dvrun as "RUN ADMNISTRADOR",
a.ADM_PNOMBRE ||' '|| a.ADM_SNOMBRE ||' '|| a.ADM_APELLIDO_PATERNO ||' '|| a.ADM_APELLIDO_MATERNO as "NOMBRE ADMINISTRADOR",
count(d.id_edificio) as "TOTAL DEPARTAMENTOS"
from edificio e 
join departamento d  on (e.id_edificio=d.id_edificio)
join comuna c on (e.id_comuna=c.id_comuna)
join administrador a on (e.adm_numrun=a.adm_numrun)
join gasto_comun_pruebaestpago g on(e.ID_EDIFICIO=g.id_edificio)
group by e.edi_nombre_edificio, c.nombre_comuna, a.adm_numrun, a.adm_dvrun, a.adm_pnombre, a.adm_snombre, a.adm_apellido_paterno, a.adm_apellido_materno;

cuando yo agrege el ultimo join de gastos comunes el total de departamentos se multiplica por alguna extraña razon que no entiendo, se supone que el count que tengo arriba sirve para contar el total de departamentos por edificio
 
Última edición:
Hola, la idea del foro es que tu postees la pregunta que tienes para que otros, si tienen la misma, ya la puedan ver aquí y no la pregunten nuevamente
 
Hola, la idea del foro es que tu postees la pregunta que tienes para que otros, si tienen la misma, ya la puedan ver aquí y no la pregunten nuevamente

Buenas, gracias por comentar, sucede que mi duda es bastante extensa, tiene que ver con el uso del join y el group by sobre algo que intento hacer y no funciona, explicarlo en un post me parece algo largo, aunque de todas formas si alguien logra ayudarme posteare mi duda resumida y la respuesta
 

Posteala, por lo que mencionas por ahora no es nada complejo
 
Prueba reemplazas ese COUNT(*) por una subconsulta para ver si hay diferencia.

Ejemplo:

Insertar CODE, HTML o PHP:
SELECT nombre, apellido, COUNT(distribuidores.id) as cantidadDistribuidores FROM personas 
JOIN distribuidores ON personas.id = distribuidores.persona

->

Insertar CODE, HTML o PHP:
SELECT nombre, apellido, (SELECT COUNT(*) FROM distribuidores WHERE distribuidores.persona = personas.id) as cantidadDistribuidores FROM personas
 

Entiendo, otra duda, mira tengo una subconsulta que me permite mostrar los departamentos que tienen solo 1 dormitorio, esto lo logro con un where, pero este hace que me genere solo 5 registros, pero mi consulta principal tiene 6 registros ya que son 6 edificios, como podria lograr que mi subconsulta tambien muestre los que tienen mas de 1 dormitorio pero que en dado caso los muestre con un 0 te adjunto la subconsulta
Insertar CODE, HTML o PHP:
select count(total_dormitorios) from departamento
join edificio using(id_edificio) where total_dormitorios=1  group by edi_nombre_edificio;
 

Con un CASE se puede realizar

Insertar CODE, HTML o PHP:
select CASE WHEN total_dormitorios = 1 THEN 
    total_dormitorios
  ELSE
    0
  END
from departamento
join edificio using(id_edificio)
group by edi_nombre_edificio;

Con eso hacemos que si total_dormitorios es igual a 1, muestre total_dormitorios y sino, muestre 0
 

Si yo tambien habia pensado en ello en un principio, lo implemente en la misma consulta, sin ninguna subconsulta, pero al hacer eso me obliga a agruparlo por total_dormitorios , y se me desagrupan por nombre de edificio y aparecen unos null y queda todo mal

- - - Actualizado - - -


mira asi se ve al hacer el case que tu dices

- - - Actualizado - - -


alguna idea 🙁
 
que tipo de sistema estas haciendo?