Определить основного поставщика - MySQL

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, есть база данных
Номер поставщика Номер детали Номер изделия
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 Лента Лондон
Прикрепляю файл для создание таблицы. Запрос состоит в следующем: Для каждого поставщика определить количество изделий, для которых этот поставщик является основным (Основным считается поставщик, для которого поставки деталей для данного изделия имеют наибольший общий вес. Если таких поставщиков несколько, выбирается поставщик с наибольшим рейтингом. Если и таких поставщиков несколько, выбирается первый по алфавиту). Вывести всю информацию о поставщике. Получилось сделать только следующий запрос: Основным считается поставщик, для которого поставки деталей для данного изделия имеют наибольший общий вес. Дальше никак не могу разобрать с if, если есть какие-то соображения буду рад услышать. Вот код первой части :
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;

Объяснение кода листинга программы

  1. Код написан на SQL (Structured Query Language), который является языком запросов к реляционным базам данных.
  2. Запрос начинается с ключевого слова SELECT, которое указывает, какие столбцы нужно извлечь из базы данных.
  3. В запросе используются две таблицы: таблица1 и таблица2.
  4. Для объединения этих таблиц используется оператор JOIN, который связывает строки из двух таблиц по общему значению столбца Номер детали.
  5. В запросе указаны три столбца, которые нужно извлечь: Номер поставщика, Номер изделия и Вес.
  6. Функция sum() используется для вычисления суммы значений столбца Вес.
  7. Результаты запроса будут отсортированы по столбцу Номер изделия (второй столбец) и Номер поставщика (первый столбец).
  8. Для указания столбцов, по которым нужно сортировать, используется запятая, разделяющая их номера.
  9. В данном случае результаты будут отсортированы по двум столбцам, что означает, что сначала будут отображены все уникальные комбинации Номер изделия и Номер поставщика, а затем они будут упорядочены по значению столбца Вес.
  10. Запрос не содержит операторов INSERT, UPDATE или DELETE, поэтому он не изменит данные в базе данных.
  11. Запрос не содержит подзапросов, поэтому он будет выполнен как есть, без дополнительных запросов к базе данных.
  12. Запрос использует стандартный синтаксис SQL и не содержит нестандартных расширений или функций.
  13. Запрос не содержит операторов LIMIT или OFFSET, поэтому он вернет все строки, соответствующие условиям соединения таблиц.
  14. Запрос не содержит операторов INTO, FROM или WHERE, поэтому он не импортирует, не экспортирует и не фильтрует данные.
  15. Запрос не содержит операторов GROUP BY, HAVING или DISTINCT, поэтому он не агрегирует, не фильтрует и не упорядочивает данные по группам.
  16. Запрос не содержит операторов ORDER BY, поэтому он не упорядочивает результаты запроса.
  17. Запрос не содержит операторов UNION, INTERSECT или MINUS, поэтому он не объединяет, не вычитает или не пересекает результаты других запросов.
  18. Запрос не содержит операторов EXCEPT или MATCH, поэтому он не фильтрует результаты по шаблонам или не удаляет дубликаты.
  19. Запрос не содержит операторов ON DUPLICATE KEY UPDATE, поэтому он не обновляет данные в базе данных при наличии дубликатов.
  20. Запрос не содержит операторов CREATE, ALTER или DROP, поэтому он не создает, не изменяет или не удаляет объекты в базе данных.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.067 из 5
Похожие ответы