TGViewer
LEFT JOIN LEFT JOIN @leftjoin · 42K subscribers
Post #2016 13.5K
Для тех, кто любит шахматы и SQL
Теперь вы можете играть в шахматы на SQL. Да, этот язык настолько могуч, что позволяет собрать таблицу-шахматную доску и двигать по ней фигуры.

Чтобы доска была похожа на доску, надо трансформировать строки в колонки с помощью условной агрегации:
--Создаем таблицу и расставляем на ней фигуры — белые в двух верхних рядах, черные в нижних
DROP TABLE IF EXISTS board;
CREATE TABLE board (rank INTEGER, file INTEGER, piece TEXT);
INSERT INTO board (rank, file, piece) VALUES

(1, 1, '♖'), (1, 2, '♘'), (1, 3, '♗'), (1, 4, '♕'), (1, 5, '♔'), (1, 6, '♗'), (1, 7, '♘'), (1, 8, '♖'),
(2, 1, '♙'), (2, 2, '♙'), (2, 3, '♙'), (2, 4, '♙'), (2, 5, '♙'), (2, 6, '♙'), (2, 7, '♙'), (2, 8, '♙'),
(7, 1, '♟'), (7, 2, '♟'), (7, 3, '♟'), (7, 4, '♟'), (7, 5, '♟'), (7, 6, '♟'), (7, 7, '♟'), (7, 8, '♟'),
(8, 1, '♜'), (8, 2, '♞'), (8, 3, '♝'), (8, 4, '♛'), (8, 5, '♚'), (8, 6, '♝'), (8, 7, '♞'), (8, 8, '♜');

-- Превращаем таблицу в расчерченную доску 8х8
WITH full_board AS (
SELECT r.rank, f.file, b.piece
FROM (SELECT 1 AS rank UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8) r
CROSS JOIN (SELECT 1 AS file UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8) f
LEFT JOIN board b ON r.rank = b.rank AND f.file = b.file
)
SELECT
rank,
MAX(CASE WHEN file = 1 THEN COALESCE(piece, '·') END) AS a,
MAX(CASE WHEN file = 2 THEN COALESCE(piece, '·') END) AS b,
MAX(CASE WHEN file = 3 THEN COALESCE(piece, '·') END) AS c,
MAX(CASE WHEN file = 4 THEN COALESCE(piece, '·') END) AS d,
MAX(CASE WHEN file = 5 THEN COALESCE(piece, '·') END) AS e,
MAX(CASE WHEN file = 6 THEN COALESCE(piece, '·') END) AS f,
MAX(CASE WHEN file = 7 THEN COALESCE(piece, '·') END) AS g,
MAX(CASE WHEN file = 8 THEN COALESCE(piece, '·') END) AS h
FROM full_board
GROUP BY rank
ORDER BY rank DESC;


Чтобы передвинуть фигуру, надо удалить ее из старой клетки и вставить в новую:
DELETE FROM board WHERE rank = 2 AND file = 5;  -- Пешка с е2…
INSERT INTO board VALUES (4, 5, '♙'); -- …перемещается на е4.


Готово, у вас есть SQL-шахматы, а значит, вам никогда не будет скучно на работе. Если играть не с кем, то можно разыграть в соло какую-нибудь классическую партию — автор идеи привел в своем блоге несколько примеров.
  • 🔥 24
  • 😱 14
  • 👾 9
  • ❤ 2
More from @leftjoin
  1. Sep 23, 2026Как грамотно делегировать задачи ИИ Внедрение искусственного интеллекта и агентов в работу…
  2. Sep 18, 2026Что делать с тепловыми картами и хороплетами? Все виды графиков и чартов по-своему хороши…
  3. Sep 16, 20263D-карты СУБД Отвлечемся от новостей про ИИ и скандалов вокруг OpenAI и посмотрим, что вну…
  4. Sep 14, 2026Решение математических проблем это не просто бенчмарк На прошлой неделе разгорелся серьезн…
  5. Sep 11, 2026Astra смогла, а вы сможете? Мы с вами недавно обсуждали эссе, опубликованное на сайте Open…
  6. Sep 8, 2026Чуждый разум ChatGPT OpenAI показала GPT‑6 Astra и вновь заговорила на любимую тему — риск…
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 →