Помогите с решением задачи по SQL, привел свои варианты решения

Задача: Схема БД интернет-магазина содержит таблицы:

  • Company – производители телефонов
  • Phone – возможные для приобретения телефоны.

Составить запрос для поиска количества и общей стоимости телефонов каждого производителя (в момент времени в интернет-магазине может не быть телефонов конкретного производителя).
Задача: для схемы данных из Задачи 1, составить запросы для:

a) поиска производителя телефона с наибольшей средней стоимостью телефона этого производителя;
b) определения количества китайских товаров;
c) получения списка самых дорогих моделей телефонов каждого производителя.

введите сюда описание изображения
1)

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);

не знаю верно или нет, но это точно работает

→ Ссылка