В базе данных есть три таблицы: Product, Provider, Product_provider_link. Структура таблиц приведена ниже.
Таблица Product – сведения о продукции
Product_id Идентификатор продукта
Product_name Наименование продукта
Product_balance Остаток продукта (количество штук)
Таблица Provider – сведения о поставщиках
Provider_id Идентификатор поставщика
Provider_name Наименование поставщика
Provider_flag Признак действующего поставщика (1-действует, 0-не действует)
Таблица Product_provider_link – связь продукции и поставщиков
Id Идентификатор связи продукта и поставщика
Product_id Идентификатор продукта
Provider_id Идентификатор поставщика
3.1. Напишите SQL-запрос, показывающий топ 10 поставщиков по объёму предоставляемой продукции
3.2. Напишите SQL-запрос, показывающий продукты, которые поставляют более одного поставщика
3.3. Напишите SQL-запрос, показывающий заканчивающиеся продукты, остаток которых меньше 5, и их поставщиков
SQL
Помогите написать sql запросы
Если Oracle, то так:
3.1
3.2
3.3
3.1
SELECT R.PROVIDER_ID, MIN(R.PROVIDER_NAME) AS PRODUCT_NAME,
SUM(P.PRODUCT_BALANCE) AS PRODUCT_VOLUME
FROM PRODUCT P, PROVIDER R, PRODUCT_PROVIDER_LINK L
WHERE P.PRODUCT_ID = L.PRODUCT_ID
AND R.PROVIDER_ID = L.PROVIDER_ID
GROUP BY R.PROVIDER_ID
ORDER BY P.PRODUCT_BALANCE DESC
LIMIT TO 10
3.2
SELECT P.PRODUCT_ID, MIN(P.PRODUCT_NAME) AS PRODUCT_NAME
FROM PRODUCT P, PROVIDER R, PRODUCT_PROVIDER_LINK L
WHERE P.PRODUCT_ID = L.PRODUCT_ID
AND R.PROVIDER_ID = L.PROVIDER_ID
GROUP BY P.PRODUCT_ID
HAVING COUNT(R.PROVIDER_ID) > 1
3.3
SELECT P.PRODUCT_ID, P.PRODUCT_NAME, R.PROVIDER_ID, R.PROVIDER_NAME
FROM PRODUCT P, PROVIDER R, PRODUCT_PROVIDER_LINK L
WHERE P.PRODUCT_ID = L.PRODUCT_ID
AND R.PROVIDER_ID = L.PROVIDER_ID
AND P.PRODUCT_BALANCE < 5
3.1 невозможно сделать с имеющимися данными. Мы ничего не знаем об объемах поставок.
/*3.2*/SELECT P.Product_id, Product_name FROM Product_provider_link PPL INNER JOIN Product P ON PPL.Product_id=P.Product_id GROUP BY P.Product_id, P.Product_name HAVING COUNT(DISTINCT PPL .Provider_id) >1;
/*3.3*/SELECT P.* FROM Product P INNER JOIN Product_provider_link PPL ON PPL.Product_id=P.Product_id INNER JOIN Provider PR ON PR.Provider_id = PPL.Provider_id WHERE P.Product_balance < 5;
Руслан Нурадилов
Спасибо большое. Я вот и подзавис поэтому. Может имеется ввиду топ по количеству продуктов. Тогда же возможно сделать?
3.1.
SELECT p.Provider_name, SUM(pr.Product_balance) AS total_product_balance
FROM Provider p
JOIN Product_provider_link ppl ON ppl.Provider_id = p.Provider_id
JOIN Product pr ON pr.Product_id = ppl.Product_id
WHERE p.Provider_flag = 1
GROUP BY p.Provider_name
ORDER BY total_product_balance DESC
LIMIT 10;
3.2.
SELECT pr.Product_name, COUNT(DISTINCT ppl.Provider_id) AS total_providers
FROM Product pr
JOIN Product_provider_link ppl ON ppl.Product_id = pr.Product_id
GROUP BY pr.Product_name
HAVING COUNT(DISTINCT ppl.Provider_id) > 1;
3.3.
SELECT pr.Product_name, p.Provider_name, pr.Product_balance
FROM Product pr
JOIN Product_provider_link ppl ON ppl.Product_id = pr.Product_id
JOIN Provider p ON p.Provider_id = ppl.Provider_id
WHERE pr.Product_balance < 5;
Похожие вопросы
- SQL-запрос Вывести идентификаторы всех владельцев комнат
- SQL запрос Найдите какой процент пользователей, зарегистрированных на сервисе бронирования
- Sql запрос создания таблицы
- Помогите пожалуйста составить sql запрос
- Помогите решить SQL задачки?
- Можно ли в SQL запросе опустить слово AS? Пример:
- SQL запрос (like)
- SQL Запрос. Дублируются данные
- Не очень понятен синтаксис запросов SQL
- Написать запрос sql