Определить основного поставщика - 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, поэтому он не создает, не изменяет или не удаляет объекты в базе данных.