Dudas serie 2

1 view
Skip to first unread message

Galicia Calva Miguel Angel

unread,
Feb 21, 2019, 12:04:49 PM2/21/19
to bd-espaci...@googlegroups.com
Hola , buenos días profesor tengo dudas respecto a la consulta D y C de la serie .
De la D se que puedo sacar el área con 2 puntos el que tenga el valor más alto de Y y el menos x y otro punto que es el mayor de X y el menor de Y , le anexo una foto de más o menos mi idea.
Y respecto al C si no tengo idea como hacerlo. Espero me pueda apoyar.
Atte:Miguel Ángel Galicia 
20190221_110256.jpg

Jorge A. Rodríguez Campos

unread,
Feb 21, 2019, 1:13:44 PM2/21/19
to bd-espaci...@googlegroups.com
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.


--
Has recibido este mensaje porque estás suscrito al grupo "Bases de Datos Espaciales FI-UNAM" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a bd-espaciales-u...@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a bd-espaci...@googlegroups.com.
Visita este grupo en https://groups.google.com/group/bd-espaciales-unam.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/bd-espaciales-unam/CABpEUjZeT4V3NgNbdnHH-rVvOse%3DSDMV-pK%2B1dw1Tz-11ier7g%40mail.gmail.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

Galicia Calva Miguel Angel

unread,
Feb 21, 2019, 1:30:09 PM2/21/19
to bd-espaci...@googlegroups.com
Muchas gracias profesora por la ayuda.

Galicia Calva Miguel Angel

unread,
Feb 21, 2019, 3:25:19 PM2/21/19
to bd-espaci...@googlegroups.com
Hola profesor , al parecer creo que me salió ya él c le mando camptura para corroborar que está bien el uso fe la cláusula having y la consulta.


El jue., 21 de feb. de 2019 12:13 p. m., Jorge A. Rodríguez Campos <jorg...@gmail.com> escribió:
20190221_142418.jpg

Jorge A. Rodríguez Campos

unread,
Feb 21, 2019, 6:10:36 PM2/21/19
to bd-espaci...@googlegroups.com
Mmmm nop
incorrecto.
En tu consulta externa solo estas contando las claves de las secciones de la red vial,
pero nunca estás involucrando a los puentes. Entonces la función count de la consulta
externa regresaría 1 en todos los renglones ya que solo existe una clave por sección.
La consulta externa también debe hacer un conteo de los puentes que coinciden con
las secciones.
sale ?  ¿si le entendiste a las subconsultas del having o no ??
saludos..

Galicia Calva Miguel Angel

unread,
Feb 22, 2019, 1:16:34 PM2/22/19
to bd-espaci...@googlegroups.com
Buenas tardes profesor , según yo si le entendí a la cláusula, pero sólo una duda la cláusula having va a llamar al count del primer select cierto? O sea al que está en select s.clave, count(*) de la consulta externa 

Jorge A. Rodríguez Campos

unread,
Feb 22, 2019, 4:01:23 PM2/22/19
to bd-espaci...@googlegroups.com
Hola Inge.
Es correcto. En la expresión  having = count(*) , el lado derecho corresponde
al resultado del conteo que aparece en la cláusula select principal  (la de arriba).
Sale?
Saludos.

Reply all
Reply to author
Forward
0 new messages