494

SQLTest — год вместе!

Серия SQLtest - бесплатный тренажёр SQL

Чуть больше года назад я запустил проект sqltest.online — бесплатный онлайн-тренажёр, призванный помочь всем желающим освоить SQL на практике. Сегодня мы с гордостью подводим итоги этого замечательного года!

Статистика Яндкс Метрики

Статистика Яндкс Метрики

Наши достижения:

  • Тренажёр предоставляет вам пять баз данных (MySQL, PostgreSQL, MS SQL Server, SQLite, Firebird) для отработки навыков.

  • Вам доступно почти 300 разнообразных практических задач.

  • Реализована возможность пройти тест на знание SQL и узнать свой рейтинг.

  • По данным Яндекс.Метрики:

    • Наш сайт посетили более 38 000 человек, просмотрев более 350 000 страниц!

    • Более 2700 зарегистрированных пользователей решили почти 50 000 задач — это потрясающий результат!

    • Наше дружное сообщество в Telegram объединяет более 700 активных участников.

Огромное спасибо всем, кто был с нами в этот год! Ваша поддержка и активность — лучшая мотивация для нас.

Хотите поддержать проект?

Мы рады, что SQLTest помогает вам в изучении SQL. Если вы хотите внести свой вклад в развитие проекта и поддержать его дальнейшее существование, вы можете сделать пожертвование. Любая сумма будет принята с благодарностью и направлена на улучшение и развитие.

Хотите поддержать проект и рассказать о своём продукте или услуге нашей заинтересованной аудитории? Свяжитесь с нами по поводу размещения рекламы на сайте sqltest.online!

Вы смотрите срез комментариев. Показать все
4
Автор поста оценил этот комментарий

Интересный инструмент, попробую использовать для своих студентов. Хотя, слишком хочет один вариант решения, когда есть альтернативы. Например:

Выберите название, описание и год выхода фильмов из таблицы film. Отсортируйте полученный список по названию в алфавитном порядке и выведите первые десять строк

Очевидное, конечно, это select .. from .. order by .. limit 10, при условии, что индексы на месте. Но тест настолько явно хочет этот ответ, что совершенно не принимает альтернативные решения. Попытка использовать window function rank over, просто выдаёт ошибку. Хотя запуск даёт абсолютно идентичный результат, те же десять строк, с нужными колонками и отсортированные по алфавиту.


WITH rf AS (

SELECT title, description, release_year, ROW_NUMBER() OVER (ORDER BY title) AS rn

FROM film

)

SELECT title, description, release_year

FROM rf

WHERE rn BETWEEN 11 AND 20;

Я понимаю, что это решение проигрывает по всем статьям - слишком много операций (filter, table scan, materialize cte, window aggregate, sort) по сравнению с тривиальным. Explain analyze также подтверждает, что оно дороже. Использовать wf для такой задачи нерационально, да и новичок об их существовании вообще не знает. Но результат-то идентичный "эталонному" и полностью валидный. Если результаты совпадают, ну оцените стоимость, выдайте ответ, что мол, производительность хромает и должно быть решение лучше.

раскрыть ветку (6)
6
Автор поста оценил этот комментарий

Ну то, что дает идентичный странно: в первом случае - limit 10, а во втором - ты берешь с 11 по 20 строчку. Лучше не используй такую альтернативу. Да и вообще оконку лучше использовать только тогда, когда выбора уже нет: они очень тяжёлые. Тут игрушечная БД, где время обработки может быть одинаковая. Когда будут миллионые БД, то время увеличится в разы. Хотя кому я объясняю, вроде все должен знать, раз преподаешь студентам.

раскрыть ветку (2)
1
Автор поста оценил этот комментарий

Скопировал из блокнота не первый кусок, а уже с пагинацией, мой косяк. Но я отдельно подчеркнул, что не собираюсь для такого запроса использовать WF, это абсолютно нерационально и вообще к психоаналитику, чтоб тот помог сделал EXPLAIN ANALYZE :) Я докопался до самого факта, что система настаивает на одном запросе, когда можно тот же результат получить разными способами.


Другой пример нашёл, и там прокатывает ещё более лютая фигня - подделка/подгонка ответа под нужный результат.

Получите столбец name из таблицы language в алфавитном порядке.

Ну, понятное дело, select name from language order by name. Проверка проходит, но говорит, что производительность 6.84 и уступает лучшему решению, которое выдаёт 0.89. Ух ты, как так? Делаем show indexes from language и видим, что там всего один индекc language_id он же первичный ключ. Ок, понятно, сортируем по неиндексированному полю и получаем table scan вместо index scan. Но как получить 0.89 в таких условиях? Я попробовал хитро сортировать по language_id через case when, но всё равно долго. Ответ прост - подгоняй результат пока не победишь. И да, это прокатывает за валидный и лучший ответ :))

SELECT 'English' AS name UNION ALL SELECT 'French' AS name UNION ALL SELECT 'German' AS name UNION ALL SELECT 'Italian' AS name UNION ALL SELECT 'Japanese' AS name UNION ALL SELECT 'Mandarin' AS name

P.S. Для постгреса бы лучше зашёл select values, но mysql так не умеет.

P.P.S. WF могут в частных случаях дать прирост производительности (по крайней мере, на постгресовской базе мне такое удавалось), но это топ-тир задач со звёздочкой и очень специфические условия.

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Да, наверно для примера можно так показать 😀

0
SQLtest.online
Автор поста оценил этот комментарий

Извините, только сейчас увидел вашу первую фразу ☺️ Если не секрет где преподаёт?

раскрыть ветку (2)
0
Автор поста оценил этот комментарий

Это не основной род занятий, но я уже давно читаю лекции студентам в двух внутренних школах на условно крупных предприятиях (я не из России, поэтому то что для нас крупное, для вас - филиал маленького стартапа, так что "условно"). Мы их называем code academy, но, по сути, обучаем и воспитываем себе кадры :) По факту это 80% менторство и 20% чтение специфических лекций по запросу от наших основных преподавателей, которые хотят свежий взгляд. Просто у английского слова mentee нет хорошего русского аналога, поэтому использую слово "студент". Простите, что ввёл в заблуждение - я не настоящий сварщик (с)

раскрыть ветку (1)
1
SQLtest.online
Автор поста оценил этот комментарий

Я тоже живу в стране с населением меньше чем в одной Москве и данный проект - не основное моё занятие. Так что мы чем-то похожи :) А спросил я потому что если вам поможет какая-нибудь доработка моего проекта под ваши нужды - то мы сможем это обсудить. Телеграм @srozhnev

Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества