Comments 30
Если на собеседовании телемастера он оказывается радиоинженером - точно надо брать: раз может создать схему - то и телевизор починит.
Ну если по правде, то это не совсем SQL. Даже в методе Pl/SQL в коде есть "NO SQL" :)
А вот еще: решение головоломки Sudoku одним SQL-запросом: https://technology.amis.nl/it/solving-a-sudoku-with-1-sql-statement-the-model-clause/
Задачи интересные, только вот это не статья, а просто список ваших SQL-запросов. Было бы неплохо разделить решения на несколько подэтапов, объяснить как пришли к решению.
Как скучно я живу... Изучаю понемногу react и golang, не знаю чё бы такое поделать чтобы интересно было.
Задачки с leetcode.
Игру?
Я вот делаю игры как хобби, ни разу не скучно. Уже много лет :)
Типа Марио?) Можно попробовать
Зависит от ваших увлечений. Ну и чтобы бэкэнд был сложнее таблицы рекордов.
Я уже много лет делаю свою игру, лютую смесь Героев, Травиана, Кингс Баунти (оригинальных), Стронгхолд, и ряда других игр. Вроде как-то получается, правда, без настоящего мультиплеера, только с общими ивентами. Фронт на JS, бэк на Питоне.
если пишешьМоё решение здесь и далее на MySQL 8.0:
то используй последние версии...., а использование SET @n = 20; с оконными функциями вообще не дело. Писать статью с deprecated операторами, и ни слова об этом - не красиво.
с оконными функциями вообще не дело
Почему? Потому-что это работает медленнее, чем могло было быть? Возможно да. Возможно, есть способ сделать это быстрее... на несколько миллисекунд. Здесь же не стоит задачи нарисовать 1 млн сердечек в ограниченное количество времени. А нарисовать одну фигуру, неважно как.
Писать статью с deprecated операторами, и ни слова об этом - не красиво.
Рано или поздно, всё будет deprecated :)
таким образом можно почувствовать себя творцом, будучи простым дата-аналитиком
Тот случай, когда имея базу данных, можно нарисовать все что угодно. Буквально.
Ждем статью о том как рисковать с помощью SQL.
Да там статья не нужна...
rm -rf /backup_task /all_backups
А потом просто налаждаться чуством медленно растущей вероятности песца.
Достаточно начать с UPDATE / DELETE и забыть поставить WHERE.
А вообще, про риск с помощью SQL почти каждый DBAшник сможет рассказать много разного :)
drop if exists тоже отличное начало для истории в баре :)
Это уже про написание кода без экранирования ввода :) Таких статей немало.
На рисование окружностей есть прекрасный алгоритм Брезенхэма. Я думаю, его было бы тоже интересно воплотить в SQL, используя свойства симметрии окружностей. :)
Неплохая визуализация к термину "нефиг делать" )
Как-то все очень сложно. Для сравнения, код рисующий шар в sqlite и результат. В pixels координата x делится пополам чтобы немного компенсировать высоту символов, которая больше чем ширина. У меня в консоли без междустрочного интервала вообще отлично выглядит.
WITH RECURSIVE
counter (i) AS (
SELECT 0 UNION ALL SELECT i + 1 FROM counter
),
pixels (x, y) AS (
SELECT i % 60 * 0.5, round(i / 60) FROM counter LIMIT 60*30
),
sdf (x, y, d) AS (
SELECT x, y, (y-15)*(y-15) + (x-15)*(x-15) FROM pixels
)
SELECT group_concat(substr('█▓▒░:- ', min(max(d / 30, 1), 7), 1), '')
FROM sdf GROUP BY y;
---------------
------:::::::::::::------
-----:::::::░░░░░░░░░:::::::-----
---:::::░░░░░░░░░░░░░░░░░░░░░:::::---
---:::░░░░░░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░░░░░:::---
---:::░░░░▒▒▒▒▒▒▒▓▓▓▓▓▓▓▓▓▓▓▒▒▒▒▒▒▒░░░░:::---
---:::░░░░▒▒▒▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒▒▒▒░░░░:::---
---::░░░░▒▒▒▒▓▓▓▓▓▓█████████████▓▓▓▓▓▓▒▒▒▒░░░░::---
---::░░░▒▒▒▒▓▓▓▓▓███████████████████▓▓▓▓▓▒▒▒▒░░░::---
---::░░░▒▒▒▓▓▓▓▓███████████████████████▓▓▓▓▓▒▒▒░░░::---
--::░░░▒▒▒▓▓▓▓███████████████████████████▓▓▓▓▒▒▒░░░::--
--:::░░▒▒▒▒▓▓▓█████████████████████████████▓▓▓▒▒▒▒░░:::--
--::░░░▒▒▒▓▓▓▓█████████████████████████████▓▓▓▓▒▒▒░░░::--
--::░░░▒▒▒▓▓▓███████████████████████████████▓▓▓▒▒▒░░░::--
--::░░░▒▒▒▓▓▓███████████████████████████████▓▓▓▒▒▒░░░::--
--::░░░▒▒▒▓▓▓███████████████████████████████▓▓▓▒▒▒░░░::--
--::░░░▒▒▒▓▓▓▓█████████████████████████████▓▓▓▓▒▒▒░░░::--
--:::░░▒▒▒▒▓▓▓█████████████████████████████▓▓▓▒▒▒▒░░:::--
--::░░░▒▒▒▓▓▓▓███████████████████████████▓▓▓▓▒▒▒░░░::--
---::░░░▒▒▒▓▓▓▓▓███████████████████████▓▓▓▓▓▒▒▒░░░::---
---::░░░▒▒▒▒▓▓▓▓▓███████████████████▓▓▓▓▓▒▒▒▒░░░::---
---::░░░░▒▒▒▒▓▓▓▓▓▓█████████████▓▓▓▓▓▓▒▒▒▒░░░░::---
---:::░░░░▒▒▒▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒▒▒▒░░░░:::---
---:::░░░░▒▒▒▒▒▒▒▓▓▓▓▓▓▓▓▓▓▓▒▒▒▒▒▒▒░░░░:::---
---:::░░░░░░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░░░░░:::---
---:::::░░░░░░░░░░░░░░░░░░░░░:::::---
-----:::::::░░░░░░░░░:::::::-----
------:::::::::::::------
---------------
А зачем сложности с WITH RECURSIVE? С generate_series() еще проще всё будет
Функция generate_series это уже расширение. Оно банально недоступно в SQLite Browser, в котором я это тестировал.
Собственно, изначально я хотел сделать в качестве примера ray-marching рендеринг куба, но т.к. математические функции в расширениях, а без них пример уже не будет простым, я остановился на том, что выше.
спасибо за пример! адаптировал под mysql 8:
SET SESSION cte_max_recursion_depth = 10000;
WITH RECURSIVE
counter (i) AS (
SELECT 0 UNION ALL SELECT i + 1 FROM counter WHERE i < 1800
),
pixels (x, y) AS (
SELECT i % 60 * 0.5, TRUNCATE(i / 60, 0) FROM counter LIMIT 1800
),
sdf (x, y, d) AS (
SELECT x, y, (y-15)*(y-15) + (x-15)*(x-15) FROM pixels
)
SELECT
group_concat(substr('█▓▒░:- ', least(greatest(d / 30, 1), 7), 1) SEPARATOR '')
FROM sdf
GROUP BY y;
+------------------------------------------------------------------------------------------------------------------------------------------------------------+
| |
| |
| --------------------- |
| -----:::::::::::::::::::----- |
| ----::::::░░░░░░░░░░░░░░░::::::---- |
| ---:::::░░░░░░░▒▒▒▒▒▒▒▒▒░░░░░░░:::::--- |
| ---::::░░░░░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░░░░::::--- |
| --::::░░░░▒▒▒▒▒▒▓▓▓▓▓▓▓▓▓▓▓▓▓▒▒▒▒▒▒░░░░::::-- |
| ---:::░░░░▒▒▒▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒▒▒▒░░░░:::--- |
| ---:::░░░▒▒▒▒▓▓▓▓▓▓▓███████████▓▓▓▓▓▓▓▒▒▒▒░░░:::--- |
| ---:::░░░▒▒▒▓▓▓▓▓▓█████████████████▓▓▓▓▓▓▒▒▒░░░:::--- |
| --:::░░░▒▒▒▓▓▓▓▓█████████████████████▓▓▓▓▓▒▒▒░░░:::-- |
| ---::░░░▒▒▒▓▓▓▓▓███████████████████████▓▓▓▓▓▒▒▒░░░::--- |
| --:::░░▒▒▒▒▓▓▓▓█████████████████████████▓▓▓▓▒▒▒▒░░:::-- |
| --::░░░▒▒▒▓▓▓▓███████████████████████████▓▓▓▓▒▒▒░░░::-- |
| --::░░░▒▒▒▓▓▓▓███████████████████████████▓▓▓▓▒▒▒░░░::-- |
| --::░░░▒▒▒▓▓▓▓███████████████████████████▓▓▓▓▒▒▒░░░::-- |
| --:::░░▒▒▒▒▓▓▓▓█████████████████████████▓▓▓▓▒▒▒▒░░:::-- |
| ---::░░░▒▒▒▓▓▓▓▓███████████████████████▓▓▓▓▓▒▒▒░░░::--- |
| --:::░░░▒▒▒▓▓▓▓▓█████████████████████▓▓▓▓▓▒▒▒░░░:::-- |
| ---:::░░░▒▒▒▓▓▓▓▓▓█████████████████▓▓▓▓▓▓▒▒▒░░░:::--- |
| ---:::░░░▒▒▒▒▓▓▓▓▓▓▓███████████▓▓▓▓▓▓▓▒▒▒▒░░░:::--- |
| ---:::░░░░▒▒▒▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒▒▒▒░░░░:::--- |
| --::::░░░░▒▒▒▒▒▒▓▓▓▓▓▓▓▓▓▓▓▓▓▒▒▒▒▒▒░░░░::::-- |
| ---::::░░░░░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░░░░::::--- |
| ---:::::░░░░░░░▒▒▒▒▒▒▒▒▒░░░░░░░:::::--- |
| ----::::::░░░░░░░░░░░░░░░::::::---- |
| -----:::::::::::::::::::----- |
| --------------------- |
| |
+------------------------------------------------------------------------------------------------------------------------------------------------------------+
30 rows in set (0.02 sec)
вот все-таки тут куча гадких критиканов собралось, мало того что минусуют, да ещё и карму сливают, вот она свобода высказывания. во всей красе, не все , конечно, но большинство, и читать интересного становится всё меньше, как следствие такого затыкания ртов...
я думаю, пора вспоминать былое и переходить к написанию клингтонов звездные войны, бывшая ранее игрушка в текстовом режиме
Задачки это конечно хорошо, но как подобное поможет на реальном проекте? В реальности если встречается чуть замудреная задача, то сразу ищется готовое решение в инете - код со stack overflow, npm пакет и ТД. Да и вообще такими извращениями как рисование SQLем на реальном проекте не занимаются, все равно что gui на питоне писать, или игры на JavaScript
Как рисовать с помощью SQL?