Базы данных / Подмога_БД_Величко / Homeworks / Homework_10
.docxВеличко Семён Владимирович
ФПКиФ II-2
Хусаинова Рена Фаридовна
Практическое задание №10.
Запросы с подзапросами.
-
Вывести программные продукты (programs) с ценой выше средней цены программных продуктов разработчика данного продукта. Вывести название программы, цену, название разработчика, среднюю цену программ данного разработчика;
-
Вывести программные продукты (programs) в написании которых использовалось максимально возможное количество языков;
-
Для каждого языка программирования вывести уровень этого языка (поле level этой же таблицы) и количество языков относящихся к этому же уровню.
Исходные данные:
1. Вывести программные продукты (programs) с ценой выше средней цены программных продуктов разработчика данного продукта. Вывести название программы, цену, название разработчика, среднюю цену программ данного разработчика:
SELECT P.Product_name, P.Price, A.Developer, A.Average_price
FROM (SELECT D.ID, D.Developer, AVG(P.Price) AS Average_price
FROM developers AS D INNER JOIN programs AS P ON D.ID = P.Number_of_developer
GROUP BY D.ID, D.Developer) AS A INNER JOIN programs AS P ON A.ID = P.Number_of_developer
WHERE P.Price > A.Average_price;
2. Вывести программные продукты (programs) в написании которых использовалось максимально возможное количество языков:
SELECT P.ID, P.Product_name
FROM programs AS P INNER JOIN (written_in AS W INNER JOIN programming_languages AS PL ON W.LangNum = PL.LangID) ON P.ID = W.ProgNum
GROUP BY P.ID, P.Product_name
HAVING COUNT(PL.LangID) = (SELECT MAX(LU.Used) AS MaxUsed
FROM (SELECT P.ID, COUNT(PL.LangID) AS Used
FROM programs AS P INNER JOIN (written_in AS W INNER JOIN programming_languages AS PL ON W.LangNum = PL.LangID) ON P.ID = W.ProgNum
GROUP BY P.ID) AS LU);
3. Для каждого языка программирования вывести уровень этого языка (поле level этой же таблицы) и количество языков относящихся к этому же уровню:
SELECT PL.name, PL.level, CNT.QTY
FROM (SELECT PL.level, COUNT(PL.LangID) AS QTY
FROM programming_languages AS PL
GROUP BY PL.level) AS CNT INNER JOIN programming_languages PL ON PL.level = CNT.level;