В базе данных есть три таблицы: 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
 
			 
						