TGViewer
Data Science. SQL hub Data Science. SQL hub @sqlhub · 36K subscribers
Post #2520 706
🌍 SQL-задача: ближайшие точки на замкнутой карте

Карта 100 × 100: противоположные края соединены. Между координатами 1 и 99 через границу всего 2 единицы.

Для каждой точки найдите всех ближайших соседей, исключая саму точку.


WITH points(id, x, y) AS (
VALUES (1, 1, 1), (2, 99, 99), (3, 3, 99)
),
distances AS (
SELECT a.id, b.id AS neighbor,
POWER(LEAST(ABS(a.x-b.x), 100-ABS(a.x-b.x)), 2)
+ POWER(LEAST(ABS(a.y-b.y), 100-ABS(a.y-b.y)), 2) AS d2
FROM points a
JOIN points b ON a.id <> b.id
),
ranked AS (
SELECT *,
DENSE_RANK() OVER (
PARTITION BY id ORDER BY d2
) AS r
FROM distances
)
SELECT id, neighbor, SQRT(d2) AS distance
FROM ranked
WHERE r = 1
ORDER BY id, neighbor;


Ответ: 1 → 2, 3; 2 → 1; 3 → 1. Расстояние во всех случаях √8 ≈ 2,828.

Подвох: по каждой оси выбираем минимум между прямым путём и переходом через границу. DENSE_RANK() сохраняет все равные минимумы, а ранжирование по квадрату расстояния позволяет вычислить корень только при выводе.
  • ❤ 3
  • 👍 2
  • 🔥 2
More from @sqlhub
  1. Oct 7, 2026ИИ-агент, который только отвечает на вопросы, — это уже прошлый этап. Следующий шаг — науч…
  2. Oct 6, 2026⚡️ SQL с подвохом: NULL в пустом списке Что выведет PostgreSQL? SELECT NULL IN (SELECT 1 W…
  3. Oct 3, 2026DOOM запустили внутри SQL-базы. Каждый кадр теперь результат запроса 🤯 Лукас Фогель собра…
  4. Oct 3, 2026Из аналитика в дата-инженеры: переход реален? 🤔 В последнее время все чаще дата-инженерия…
  5. Oct 2, 2026🧠 TIL: SQLite превращает числа в текст сразу по две цифры Обычно integer → string делают…
  6. Oct 1, 2026GitHub представил Agentic Engineering System - фреймворк для команд, которые внедряют AI-а…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →