Теперь вы можете играть в шахматы на 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-шахматы, а значит, вам никогда не будет скучно на работе. Если играть не с кем, то можно разыграть в соло какую-нибудь классическую партию — автор идеи привел в своем блоге несколько примеров.