Как решать задачи на SQLПолный текст. Разберем на нескольких примерах последовательность шагов для решения задач. С разрешения Федора Самородова разберем первые две задачи, придуманные им. Интерактивный учебник по SQL · Наша книга: "SQL. Задачи и решения". Изд-во Питер Анализ характерных ошибок при решении задач обучающего . В недавнем своем топике я приводил три на мой взгляд интересные задачи по MySQL с желанием посмотреть на возможные решения . Идея этой книги родилась из опыта сопровождения сайта http:// где в режиме онлайн можно решать задачи на написание запросов к . Разберем на нескольких примерах последовательность шагов для решения задач. С разрешения Федора Самородова разберем первые две задачи, . Приветствуем всех в гурппе SQL-EX решения. Цель её создания – помочь разобраться в решении задач портала SQL-EX. Ведь иногда, при решении . Задача 1. Какие продавцы продали в 1. Прежде всего, нужно понять какие именно данные получаются как результат решения, а затем уже проанализировать текст задачи и выявить остальные логические компоненты задачи, такие как критерии, показатели и пр. В формализованном виде можно представить задачу в следующем виде: результат: продавцыкритерий. Далее мы смотрим схему базы данных и отображаем на нее логические компоненты задачи. Sql Задачи И Решения Учебник Сергей Моисеенко PdfПо схеме мы видим, что напрямую между продавцами (Employees) и проданными товарами (Order Details) нет прямой связи, но обе таблицы связаны с таблицей (Orders), которая также нам требуется, чтобы выбрать данные на 1. Это значит, что продавцы имеют косвенную связь с проданными товарами, которая, с точки зрения SQL, принципиально не отличается от прямой связи. В формализованном виде можно представить данные для задачи в следующем виде: продавцы: таблица Employeesпроданные товары: таблица . В данном случае количество колонок не влияет на решение задачи. Поскольку в задаче у нас есть показатель, который считается с помощью агрегатной функции, то в запросе нам потребуется сгруппировать данные с помощью GROUP BY. ![]() В качестве аналитики, соответственно мы укажем колонку Last. Name: select Last. Name - -,sum(od. Quantity). Employees as e. join Orders as o on e. Employee. ID = o. Employee. ID. join . Давайте в учебных целях рассмотрим вариант решения с подзапросами. В новом варианте у нас будут использоваться такие же таблицы, критерии и показатель. Но по синтаксису мы заменяем каждый JOIN на подзапрос. При использовании подзапросов можно вначале написать общую структуру основного запроса с фейковыми подзапросами (SELECT NULL), чтобы мы поняли общую логику решения: select Last. Name. from Employees as e. Принципиальным преимуществом использования подзапросов является наглядное разделение задачи на подзадачи. Соответственно, если мы смогли выполнить декомпозицию сложной задачи, то она перестала для нас быть сложной. В этом секрет быстрого решения сложных задач. Давайте вспомним как считается показатель продажи товара — важно преобразовать условия соединения из JOIN ON в критерий выбора данных WHERE. Поскольку Order Details связан с Orders как «многие к одному» (несколько товаров в одном заказе), то нам нужен предикат IN: selectsum(od. Quantity). from . Если мы не понимаем, как соединять подзапросы между собой, значит нужно еще раз внимательно изучить схему, и тогда мы вспомним, что продажи товаров у нас связаны с сотрудниками через таблицу Orders, тем более, что нам еще нужно реализовать критерий по году продаж, который вычисляется из поля Order. Date этой таблицы. С помощью подзапросов у нас каждая подзадача решается с помощью простого запроса. Нам осталось добавить в подзапрос критерий для фильтрации заказов. Для этого нам нужен еще один подзапрос 2- го уровня. При тестировании подзапроса можно написать частный случай для сотрудника . В этой задаче важно не запутаться: очевидно, какой у нас должен получиться результат, мы сразу же видим, что нам нужен показатель по продажам и критерий по году продаж. Тонкость заключается в том, чтобы понять: «два товара» это ограничение результата на основе рейтинга по сумме продаж. Формализация задачи: результат: покупатель (имя, фамилия), товар (название). Анализ данных. По схеме данных понимаем, что нам нужно связать справочник заказчиков (Customers), заказы (Orders) и проданные товары (Order Details). Формализация данных: заказчики: таблица Customers. Contact. Name)заказы: таблица Orders. Order. Date) = 1. Задачи и решения" Сергея Моисеенко в бумажном варианте. Задачи и решения» Сергей Моисеенко. Идея этой книги родилась из опыта сопровождения сайта http:// где в режиме онлайн . 5 сайтов для оттачивания навыков написания SQL-запросов. Order Details. максимальная сумма продаж. Quantity * Unit. Price * (1 — Discount)). Contact. Name), название товара (Product. Name)справочник товаров: таблица Products. Product. Name)Рейтинг данных строится с помощью ORDER BY, а ограничение реализуется с помощью TOP в SELECT. Поскольку у нас есть показатель, который мы считаем с помощью агрегатной функции sum, то нам потребуется GROUP BY и задать с его помощью аналитику по Contact. Name и Product. Name. Начальный вариант решения: SELECT c. Contact. Name, p. Product. Name,SUM(od. Quantity * od. Unit. Price *(1 - od. Discount))AS Amt. FROM Customers c. JOIN Orders o ON o. Customer. ID = c. Customer. ID. JOIN . Очевидно, что TOP и ORDER BY здесь не помогут, поскольку они действуют на весь запрос. И нужно вспомнить про итеративный способ соединения данных с помощью APPLY: SELECT c. Contact. Name, p. Product. Name. FROM Customers c. SELECTTOP 2 p. Product. Name. FROM Orders o. JOIN . Давайте используем оконную функцию ROW. Если внимательно посмотреть на таблицу справочника товаров (Products), то мы увидим, что наличие товара это поле Units. In. Stock. Но есть еще интересное поле Reorder. Level, в котором задается уровень запаса для обеспечения надежности поставок товара. И необходимо уточнить требование о необходимости его учитывать.
0 Comments
Leave a Reply. |
AuthorWrite something about yourself. No need to be fancy, just an overview. Archives
November 2017
Categories |