Определить основного поставщика - MySQL
Формулировка задачи:
Здравствуйте, есть база данных
Прикрепляю файл для создание таблицы.
Запрос состоит в следующем: Для каждого поставщика определить количество изделий, для которых этот поставщик является основным (Основным считается поставщик, для которого поставки деталей для данного изделия имеют наибольший общий вес. Если таких поставщиков несколько, выбирается поставщик с наибольшим рейтингом. Если и таких поставщиков несколько, выбирается первый по алфавиту). Вывести всю информацию о поставщике.
Получилось сделать только следующий запрос: Основным считается поставщик, для которого поставки деталей для данного изделия имеют наибольший общий вес. Дальше никак не могу разобрать с if, если есть какие-то соображения буду рад услышать.
Вот код первой части :
Номер поставщика | Номер детали | Номер изделия |
S1 | P1 | J1 |
S1 | P1 | J4 |
S2 | P3 | J1 |
S2 | P3 | J2 |
S2 | P3 | J3 |
S2 | P3 | J4 |
S2 | P3 | J5 |
S2 | P3 | J6 |
S2 | P3 | J7 |
S2 | P5 | J2 |
S3 | P3 | J1 |
S3 | P4 | J2 |
S4 | P6 | J3 |
S4 | P6 | J7 |
S5 | P2 | J2 |
S5 | P2 | J4 |
S5 | P5 | J5 |
S5 | P5 | J7 |
S5 | P6 | J2 |
S5 | P1 | J4 |
S5 | P3 | J4 |
S5 | P4 | J4 |
S5 | P5 | J4 |
S5 | P6 | J4 |
Номер детали | Название | Цвет | Вес | Город |
P1 | Гайка | Красный | 12 | Лондон |
P2 | Болт | Зеленый | 17 | Париж |
P3 | Винт | Голубой | 17 | Рим |
P4 | Винт | Красный | 14 | Лондон |
P5 | Кулачок | Голубой | 12 | Париж |
P6 | Блюм | Красный | 19 | Лондон |
Номер изделия | Название | Город |
J1 | Жесткий диск | Париж |
J2 | Перфоратор | Рим |
J3 | Считыватель | Афины |
J4 | Принтер | Афины |
J5 | Флоппи-диск | Лондон |
J6 | Терминал | Осло |
J7 | Лента | Лондон |
create temporary table basic select t1.number_postavchiki as postavchik, t1.number_tools as numb_tools, t1.number_product as numb_product, t1.amount, t2.rate, t2.secondname from delivery as t1 join (select number_product as n_product, number_tools as tol1, max(amount) as max from delivery group by number_product)maximum on maximum.max=t1.amount and maximum.n_product = t1.number_product join postavchiki as t2 t2.number_postavchiki = t1.number_postavchiki;
Решение задачи: «Определить основного поставщика»
textual
Листинг программы
select `Номер поставщика`, `Номер изделия`, sum(`Вес`) from `таблица1` join `таблица2` using(`Номер детали`) group by 2, 1;
Объяснение кода листинга программы
- Код написан на SQL (Structured Query Language), который является языком запросов к реляционным базам данных.
- Запрос начинается с ключевого слова
SELECT
, которое указывает, какие столбцы нужно извлечь из базы данных. - В запросе используются две таблицы:
таблица1
итаблица2
. - Для объединения этих таблиц используется оператор
JOIN
, который связывает строки из двух таблиц по общему значению столбцаНомер детали
. - В запросе указаны три столбца, которые нужно извлечь:
Номер поставщика
,Номер изделия
иВес
. - Функция
sum()
используется для вычисления суммы значений столбцаВес
. - Результаты запроса будут отсортированы по столбцу
Номер изделия
(второй столбец) иНомер поставщика
(первый столбец). - Для указания столбцов, по которым нужно сортировать, используется запятая, разделяющая их номера.
- В данном случае результаты будут отсортированы по двум столбцам, что означает, что сначала будут отображены все уникальные комбинации
Номер изделия
иНомер поставщика
, а затем они будут упорядочены по значению столбцаВес
. - Запрос не содержит операторов
INSERT
,UPDATE
илиDELETE
, поэтому он не изменит данные в базе данных. - Запрос не содержит подзапросов, поэтому он будет выполнен как есть, без дополнительных запросов к базе данных.
- Запрос использует стандартный синтаксис SQL и не содержит нестандартных расширений или функций.
- Запрос не содержит операторов
LIMIT
илиOFFSET
, поэтому он вернет все строки, соответствующие условиям соединения таблиц. - Запрос не содержит операторов
INTO
,FROM
илиWHERE
, поэтому он не импортирует, не экспортирует и не фильтрует данные. - Запрос не содержит операторов
GROUP BY
,HAVING
илиDISTINCT
, поэтому он не агрегирует, не фильтрует и не упорядочивает данные по группам. - Запрос не содержит операторов
ORDER BY
, поэтому он не упорядочивает результаты запроса. - Запрос не содержит операторов
UNION
,INTERSECT
илиMINUS
, поэтому он не объединяет, не вычитает или не пересекает результаты других запросов. - Запрос не содержит операторов
EXCEPT
илиMATCH
, поэтому он не фильтрует результаты по шаблонам или не удаляет дубликаты. - Запрос не содержит операторов
ON DUPLICATE KEY UPDATE
, поэтому он не обновляет данные в базе данных при наличии дубликатов. - Запрос не содержит операторов
CREATE
,ALTER
илиDROP
, поэтому он не создает, не изменяет или не удаляет объекты в базе данных.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д