Hola Miguel que tal.
La idea es correcta, pero la sentencia SQL tiene algunos detalles.
Efectivamente, la idea es obtener las distancias entre Xmax y Xmin y lo mismo para Ymax y Ymin
No es necesario emplear la fórmula de la distancia ya que el ejercicio dice que los lados o aristas
del rectángulo son paralelas y/o perpendiculares a los ejes. Entonces el área podría calcularse asi:
A = (Xmax-Xmin)*(Ymax-Ymin) ¿cierto?
Entonces, el SQL tienes que obtener los valores mínimos y máximos de los puntos que forman al
rectángulo y aplicar resta y luego la multiplicación.
La propuesta que envías no calcula los valores máximos y mínimos, por lo tanto obtendrías N registros.
Recomendación: emplear las funciones min y max:
select (max(p.x)-min(p.x)) * .......
Para el inciso C, primero necesitas saber el número de puentes que tiene cada sección.
Para ello puedes emplear una consulta que cuente el número de registros agrupados por
sección donde alguno de sus puntos coincidan con los puntos del puente.
select s.clave,count(*)
from seccion_red_vial sr, contorno c, punto_contorno pc, puente pu
--joins
group by s.clave
having.....
En uno de los joins igualarías punto_id de puente con punto_id de punto_contorno
Esto generará una salida como:
clave count
c1 2
c2 3
c3 1
etc...
Después tendrías que hacer algo para excluir al primer y tercer registro y quedarte con el mayor (segundo
registro). Esto lo puedes hacer de varias formas.
Una es, agregar subconsultas en la cláusula having:
having count(*) = (
select max(cuenta) from (
select count(*) as cuenta
from seccion_red_vial sr, contorno c, punto_contorno pc, puente pu
where sr.contorno_id = pc.contorno_id
and pc.punto_id = pu.punto_id
group by pc.clave
);
)
Repasa un poco el uso de subconsultas en having.
Analiza estos tips, y manda tus dudas...
sale ?
saludos.