Помогите с решением задачи по SQL, привел свои варианты решения
Задача: Схема БД интернет-магазина содержит таблицы:
- Company – производители телефонов
- Phone – возможные для приобретения телефоны.
Составить запрос для поиска количества и общей стоимости телефонов каждого производителя (в момент времени в интернет-магазине может не быть телефонов конкретного производителя).
Задача: для схемы данных из Задачи 1, составить запросы для:
a) поиска производителя телефона с наибольшей средней стоимостью телефона этого производителя;
b) определения количества китайских товаров;
c) получения списка самых дорогих моделей телефонов каждого производителя.
SELECT
company.companyName COUNT(phone.phoneId),
SUM(phone.price)
FROM company, phone
WHERE
company.companyId = phone.companyId
a)
SELECT
company.companyName,
AVG(phone.price)
FROM
company, phone
WHERE
b)
SELECT
company.companyCountry,
COUNT(phone.phoneId)
FROM
company, phone
WHERE
companyCountry = 'Chine'
c)
SELECT
DISTINCT company.companyName,
phone.phoneModel,
phone.price
FROM
company, phone
WHERE
company.companyId = phone.companyId
AND phone.price=(SELECT MAX(price) FROM phone)
GROUP BY price
Ответы (1 шт):
Автор решения: strazhishche
→ Ссылка
/*SQL Задача 1*/
SELECT company.companyName AS 'Компания', COUNT(phone.companyId) AS 'Количество', COALESCE(SUM(phone.price),0) AS 'Сумма'
FROM company
LEFT JOIN phone ON phone.companyId = company.companyId
GROUP BY company.companyName;
/*SQL Задача 2.а*/
SELECT company.companyName AS 'Компания', COUNT(phone.companyId) AS 'Количество', AVG(phone.price) AS average
FROM company
LEFT JOIN phone ON phone.companyId = company.companyId
GROUP BY (company.companyId) HAVING average =
(
SELECT DISTINCT MAX(AVG(phone.price)) OVER ()
FROM company
LEFT JOIN phone ON phone.companyId = company.companyId
GROUP BY (company.companyId)
);
/*SQL Задача 2.b*/
SELECT DISTINCT company.companyCountry AS 'Страна', SUM(COUNT(phone.phoneModel)) OVER() 'Количество'
FROM company
INNER JOIN phone ON phone.companyId = company.companyId
GROUP BY company.companyName HAVING company.companyCountry = 'Китай';
/*SQL Задача 2.c*/
SELECT company.companyName AS 'Комапания', phone.phoneModel AS 'Модель', phone.price AS 'Цена'
FROM phone
INNER JOIN company ON phone.companyId = company.companyId
WHERE phone.price IN (SELECT MAX(phone.price) FROM phone GROUP BY phone.companyId)
GROUP BY (phone.phoneModel) ORDER BY (phone.companyId);
не знаю верно или нет, но это точно работает
