SQL
Вы будете использовать базу данных publications.
publications (1).sql Скачать publications (1).sql
Создайте файл solutions.sql со всеми комментариями, необходимыми для понимания вашего кода.
Ссылка на внешний сайт.Задача 1 - Самые прибыльные авторы
В этой задаче вы узнаете, кто являются топ-3 самых прибыльных авторов в базе данных publications. Пошаговые инструкции помогут вам развить навыки решения задач.
Чтобы решить эту задачу, важно учитывать следующие моменты:
В таблице
salesназвание может встречаться несколько раз. Необходимо рассчитывать роялти для каждой продажи.Несмотря на то, что у названия может быть несколько записей
sales, аванс должен быть рассчитан только один раз для каждого названия.В вашем окончательном решении нужно суммировать следующую прибыль для каждого отдельного автора:
- Все авансы, которые рассчитываются ровно один раз для каждого названия.
- Все роялти по каждой продаже.
Поэтому, для достижения цели, нельзя использовать только один запрос SELECT, потребуется использовать подзапросы. Вам нужно выполнить несколько шагов, чтобы получить решение. Ниже приведён обзор этих шагов:
Рассчитать роялти каждой продажи для каждого автора и аванс для каждого автора и публикации.
Используя результат из шага 1 как подзапрос, агрегировать общие роялти для каждого названия и автора.
Используя результат из шага 2 как подзапрос, вычислить общую прибыль каждого автора, суммируя авансы и роялти по каждому названию.
Ниже мы проведём вас через каждый шаг. В вашем файле solutions.sql включите SELECT-запросы каждого шага, чтобы ваш преподаватель мог проверить ваш процесс решения.
Шаг 1: Рассчитать роялти каждой продажи для каждого автора и аванс для каждого автора и публикации
Напишите SELECT-запрос для получения следующего результата:
- ID названия
- ID автора
- Аванс каждого названия и автора
- Формула:
advance = titles.advance * titleauthor.royaltyper / 100
- Формула:
- Роялти каждой продажи
- Формула:
sales_royalty = titles.price * sales.qty * titles.royalty / 100 * titleauthor.royaltyper / 100
- Формула:
- Обратите внимание, что
titles.royaltyиtitleauthor.royaltyperделятся на 100, так как это проценты, а не числа с плавающей точкой.
В результате этого шага каждое название может встречаться более одного раза для каждого автора, так как у названия может быть несколько продаж.
Ссылка на внешний сайт.Шаг 2: Агрегировать общие роялти для каждого названия и автора
Используя результат из шага 1, напишите запрос с подзапросом, чтобы получить следующий результат:
- ID названия
- ID автора
- Объединённые роялти каждого названия для каждого автора
- Подсказка: используйте SUM и группировку по
au_idиtitle_id
- Подсказка: используйте SUM и группировку по
В результате этого шага каждое название должно встречаться только один раз для каждого автора.
Ссылка на внешний сайт.Шаг 3: Рассчитать общую прибыль каждого автора
Теперь, когда у каждого названия есть ровно одна строка для каждого автора, где доступны аванс и роялти, мы готовы получить окончательный результат. Используя результат из шага 2, напишите запрос с двумя подзапросами, чтобы получить следующий результат:
- ID автора
- Прибыль каждого автора, суммируя авансы и роялти по каждому названию
Отсортируйте результат по общей прибыли от высокой к низкой и ограничьте количество строк тремя.
Ссылка на внешний сайт.Задача 2 - Альтернативное решение
В предыдущей задаче вы разработали решение следующим образом:
- Использование производных таблиц (подзапросов).(см. ссылки на внешние ресурсы)
Мы предлагаем попробовать другой способ:
- Создание временных таблиц MySQL и выполнение запросов к ним в последующих шагах.
Включите ваше альтернативное решение в файл solutions.sql.
Ссылки на внешние ресурсы.Дополнительное обучение
В рамках этой задачи вы можете использовать либо производственные таблицы, либо временные таблицы для разработки решения. Первый способ может быть более удобным, однако оба подхода подходят в определённых ситуациях. Производственные таблицы хранятся в памяти MySQL и исчезают после завершения запроса. Временные таблицы физически хранятся в MySQL, но только временно. Пока ваша сессия активна, вы можете к ним обращаться.
Если ваши данные часто меняются, использование производных таблиц может привести к разным результатам при каждом выполнении. Временные таблицы сохраняют данные, пока сессия активна, и даже при изменениях в базе, данные в них остаются неизменными, пока вы их не обновите. Поэтому, если важна актуальность данных, лучше использовать производные таблицы. Если же важна производительность при больших объёмах данных и сложных запросах, лучше использовать временные таблицы, так как они позволяют выполнять тяжёлые вычисления один раз и повторно обращаться к результатам без повторных затрат.
Ссылка на внешний сайт.Задача 3
Расширяя решение из задач 1 и 2, создайте постоянную таблицу с названием most_profiting_authors, которая будет содержать данные о самых прибыльных авторах. Таблица должна иметь 2 столбца:
au_id- ID автораprofits- Общая прибыль автора, суммируя авансы и роялти
Включите ваше решение в файл solutions.sql.
Ссылки на внешние ресурсы.Дополнительное обучение
Чтобы сбалансировать производительность транзакций и актуальность данных, инженеры часто планируют автоматические скрипты для периодического получения данных и сохранения результатов в постоянных таблицах. Тогда при необходимости можно получать данные из этих таблиц, избегая повторных затрат на тяжелые транзакции. В результате данные могут быть немного устаревшими, но доступ к ним осуществляется мгновенно.
Актуальные фриланс-проекты в категории Базы данных и SQL
База 1С для предприятияНужна база для ведения склада авторазборки, контроля финансов и формирования заказов. Необходимо добавлять автомобиль как объект и закреплять за ним запчасти. Полную структуру и то, как должно выглядеть и работать, расскажу во время разговора. Базы данных и SQL ∙ 1 час 1 минута назад ∙ 2 ставки |
Интеграция данных 1СОрганизовать качественную подготовку и переток данных из 1С в BigQuery для дальнейшего использования в Looker:Организовать данные в соответствии с тем, какие поля нужны.Подготовить понятную структуру таблиц и промежуточных наборов данных, на которых будут строиться… Базы данных и SQL, Обработка данных ∙ 1 день 6 часов назад ∙ 9 ставок |
Разработка простого системы контроллинга и управленческого учета в Google Sheets «под ключ»Название задания: Разработка простого системы контроля и управленческого учета в Google Sheets «под ключ» для строительной компании в Польше (+ онлайн обучение и помощь при внедрении) О компании, контексте и моей главной проблеме Добрый день, Я ищу опытного специалиста Google… Базы данных и SQL, Бухгалтерские услуги ∙ 2 дня 11 часов назад ∙ 33 ставки |
Розробка аналітичного Power BI дашборду
2000 UAH
Ось такий у нас запит, потрібна людина яка розбирається з Power BI: Экран 1: Strategic Cockpit (Финансовое здоровье завода) Цель: За 5 секунд понять, «где мы теряем деньги и сколько?». KPI Tiles (Верхняя полоса): Общая маржа (Факт vs План) в %. Сумма «упущенной выгоды»… Базы данных и SQL ∙ 2 дня 15 часов назад ∙ 13 ставок |
Проект: Базовая настройка сквозной аналитики (Аналитик данных / Инженер аналитики)
9000 UAH
О нас и текущий стек: Мы — B2C веб-продукт. В настоящее время у нас разрозненные данные, которые нужно объединить в единую систему для принятия маркетинговых решений. База данных: PostgreSQL (данные пользователей). Платежи: Stripe. Веб-аналитика: Google Analytics 4.… Базы данных и SQL ∙ 4 дня 10 часов назад ∙ 10 ставок |