SQL · STATION: geometría y medianas

SQL

SQL · STATION: geometría y medianas

Los tres últimos ejercicios de STATION, donde la consulta deja de ser filtrado y pasa a ser matemática: distancia Manhattan, distancia euclidiana y la mediana.

Sep 11, 2026

6 min

HomeBlogsSQL · STATION: geometría y medianas

Esta serie mantiene la mente fresca resolviendo, uno a uno, los ejercicios de HackerRank. Cada entrada toma un tema concreto y lo agota; todas las consultas están en MySQL salvo donde se indique.

Te invito a intentar cada ejercicio antes de leer la solución.

Los tres últimos ejercicios de STATION son los únicos donde hay que pensar en geometría antes que en SQL.

STATION

The STATION table is described as follows:

ColumnaTipo
IDNUMBER
CITYVARCHAR2
STATEVARCHAR2
LAT_NNUMBER
LONG_WNUMBER

where LAT_N is the northern latitude and LONG_W is the western longitude.

Weather Observation Station 18

Consider P₁(a, b) and P₂(c, d) to be two points on a 2D plane.

  • a happens to equal the minimum value in Northern Latitude (LAT_N in STATION).

  • b happens to equal the minimum value in Western Longitude (LONG_W in STATION).

  • c happens to equal the maximum value in Northern Latitude (LAT_N in STATION).

  • d happens to equal the maximum value in Western Longitude (LONG_W in STATION).

Query the Manhattan Distance between points P₁ and P₂ and round it to a scale of 4 decimal places.

Aquí tienes la explicación completa de la fórmula de Manhattan, lista para copiar y pegar en Obsidian (con LaTeX):


La distancia Manhattan entre dos puntos P1(a,b)P_1(a, b) y P2(c,d)P_2(c, d) en un plano 2D se define como la suma de las diferencias absolutas de sus coordenadas:

d=ac+bdd = |a - c| + |b - d|

De forma más general, para dos puntos P1(x1,y1)P_1(x_1, y_1) y P2(x2,y2)P_2(x_2, y_2):

d=x1x2+y1y2d = |x_1 - x_2| + |y_1 - y_2|

Solución

En el contexto de este ejercicio, los puntos se definen así:

  • a=min(LAT_N)a = \min(\text{LAT\_N})
  • b=min(LONG_W)b = \min(\text{LONG\_W})
  • c=max(LAT_N)c = \max(\text{LAT\_N})
  • d=max(LONG_W)d = \max(\text{LONG\_W})

Por lo tanto, la expresión final queda:

d=min(LAT_N)max(LAT_N)+min(LONG_W)max(LONG_W)d = \left| \min(\text{LAT\_N}) - \max(\text{LAT\_N}) \right| + \left| \min(\text{LONG\_W}) - \max(\text{LONG\_W}) \right|

Y el resultado debe redondearse a 4 decimales:

resultado=ROUND(d,4)\text{resultado} = \text{ROUND}(d, 4)

Simplificando toda la expresión en la consulta e invirtiendo las restas para que no den negativo, quedaría así:

SQL
SELECT ROUND(((MAX(LAT_N)-MIN(LAT_N)) + (MAX(LONG_W)-MIN(LONG_W))), 4) FROM STATION;

De esta forma, cada diferencia se calcula como mayor - menor, garantizando un valor positivo sin necesidad de usar ABS(). Luego sumamos ambas diferencias y redondeamos el resultado a 4 decimales con ROUND

Weather Observation Station 19

Consider P₁(a, c) and P₂(b, d) to be two points on a 2D plane where (a, b) are the respective minimum and maximum values of Northern Latitude (LAT_N) and (c, d) are the respective minimum and maximum values of Western Longitude (LONG_W) in STATION.

Query the Euclidean Distance between points P₁ and P₂ and format your answer to display 4 decimal digits.2

Solución

La distancia euclidiana es la distancia en línea recta entre dos puntos. Es la distancia "más corta" posible, como si trazaras una línea directa de un punto a otro con una regla. Es la que usamos intuitivamente cuando decimos "¿qué tan lejos está esto de aquello?".

d=(ba)2+(dc)2d = \sqrt{(b - a)^2 + (d - c)^2}

a=min(LAT_N)a = \min(\text{LAT\_N})

b=max(LAT_N)b = \max(\text{LAT\_N})

c=min(LONG_W)c = \min(\text{LONG\_W})

d=max(LONG_W)d = \max(\text{LONG\_W})

Esto viene del teorema de Pitágoras. Si tienes dos puntos en un plano, puedes formar un triángulo rectángulo donde:

  • Un cateto es la diferencia horizontal: x2x1x_2 - x_1
  • El otro cateto es la diferencia vertical: y2y1y_2 - y_1
  • La hipotenusa es la distancia entre los puntos: dd

ba=max(LAT_N)min(LAT_N)b - a = \max(\text{LAT\_N}) - \min(\text{LAT\_N}) → diferencia entre latitudes.

dc=max(LONG_W)min(LONG_W)d - c = \max(\text{LONG\_W}) - \min(\text{LONG\_W}) → diferencia entre longitudes.

SQL
SELECT ROUND(
SQRT(
    POWER(MAX(LAT_N) - MIN(LAT_N), 2) +
    POWER(MAX(LONG_W) - MIN(LONG_W), 2)
), 4)
FROM STATION;

Weather Observation Station 20

median is defined as a number separating the higher half of a data set from the lower half. Query the median of the Northern Latitudes (LAT_N) from STATION and round your answer to 4 decimal places.

Solución

Aquí tienes la explicación de la mediana siguiendo el mismo estilo que usaste para la media:


Según Khan Academy (s.f.), la mediana "es el número de en medio; se encuentra al ordenar todos los puntos de datos y elegir el que está en medio (o si hay dos números en medio, tomar la media de esos dos números)".

En Khan Academy podremos encontrar varios ejemplos.

Para calcular la mediana de LAT_N redondeada a 4 decimales. Como la tabla STATION tiene 499 filas (un número impar), la mediana es simplemente el valor que ocupa la posición central una vez ordenados los datos de menor a mayor. Para obtenerlo, ordenamos con ORDER BY LAT_N y usamos LIMIT 1 OFFSET 249OFFSET 249 salta las primeras 249 filas (posiciones 1 a 249) y LIMIT 1 toma la siguiente, que es la posición 250, justo el medio. Finalmente, redondeamos con ROUND(..., 4).

SQL
SELECT ROUND(LAT_N, 4)
FROM STATION
ORDER BY LAT_N
LIMIT 1 OFFSET 249;