(первая часть: #3061451)
(вторая часть: #3061453)
И, наконец, на сладкое у нас был SQL, а именно MySQL.
Тут уже ничего в IDE не склонируешь, тут уже надо запросики писать. Ручками. Времени осталось — 40 минут.
Дана схема базы данных. Две таблички, связанные через третью как many-to-many со всякими метаданными в связующей таблице. Нуднейшее условие, которое раз двадцать пришлось перечитывать, чтобы осознать, что именно от нас хотят. Чтобы не спойлерить, выглядит оно типа такого:
"Найти всех доярок-рекордсменок и всех подоеных ими коров, отсортировав по имени коровы и годовому числу надоев, где дояркой-рекордсменкой считается доярка, надоившая за все годы в среднем больше, чем все доярки колхоза в среднем за 1968 год. Кроме того, бригадирок звена поместить наверх доски почётов"
Там не про доярок и коров, но этим текстом я просто иллюстрирую класс сложности запроса. Вроде и не сложный, но дико нудный и после полутора часа программирования вгоняющий в смесь тоски, паники и обречённости.
Итак, читаем ещё раз: "Найти всех доярок-рекордсменок...", о-о-о чёрт... "среднемесячных удоев за отчётный год..." бля... "...бригадой считается звено...", бу-э-э-э...
Короче, не стал заморачиваться и в полубесознательном состоянии набросал решение через CTE.
Ну, типа "WITH средниеУдои AS (SELECT AVG(удой) AS срУдой FROM дойка_коров..." и т.д. А потом ", дояркиРекордсменки AS (SELECT д.* FROM доярка д INNER JOIN дойка_коров дк..."
Не хочу вспоминать. Больно до сих пор. А потом из всех этих CTE джойнами и такой-то матерью вытаскиваем нужные председателю колхоза данные.
И самое прикольное, что ход мыслей у меня был изначально правильный.
Да вот только данные не сходились с тестовыми, хоть плачь!
Причина была в том, что я до конца не осознавал, что у меня в запросе по актам дойки, совершённым за 1968 год (необходимом для получения среднемесячных удоев за год) WHERE-выражение для фильтрации по году было написано с ошибкой. А всё остальное — идеально правильно (ну, и, разумеется, совершенно по-идиотски с точки зрения оптимизации).
Понял я свою ошибку за полторы минуты до конца срока. Задание делал ранним утром, чтобы никто не отвлекал.
А теперь представьте картину. Спавшая до этого в соседней комнате Птичка, просыпается от моих криков: "Ну! Ну! Сука! Не убивай меня! А-а-а-а-а, на тебе, на, сука, умри!!! АААА не уибиваааааййй!!! Сдохни!"
Это я боролся с жутко тормозным интерфейсом тестовой системы, который по 10 секунд запускал каждый запрос. А может быть со своими тормозными мозгами. А может, и скорее всего, с тем, как по-дебильному был написан мой SQL-запрос.
Но я всё-таки успел исправить и нажать чёртову кнопку Submit and Finish на последней секунде до конца срока.
Вот так это было. Буквально на последней секунде.
В итоге, я остался доволен всеми заданиями. Но, конечно, ограничение в два часа это и эйджизм, и эйблизм сразу, и при желании можно их за это по американским законам засудить. Эйджизм — потому что вдруг я дедушка старенький, печатаю медленно, думаю ещё медленнее. Эйблизм — а вдруг я вообще слепой, сижу в brltty, дайте два дня как минимум. Или я Стивен Хокинг. Стивен Хокинг бы не прошёл, разве что с Neuralink, да и то не факт.
Ну, в общем, подождём, чо скажут.
Зарплата у них там обещается по результатам тестирования от 5 до 8 k$, претендую на 8.
Предыдущие части — по тегу juick.com #DevsKiller #работа #IT