SQL

SQL-ex 41 задание. Не получается

Задание: 41 (Serge I: 2019-05-31)
Для каждого производителя, у которого присутствуют модели хотя бы в одной из таблиц PC, Laptop или Printer,
определить максимальную цену на его продукцию.
Вывод: имя производителя, если среди цен на продукцию данного производителя присутствует NULL, то выводить для этого производителя NULL,
иначе максимальную цену.
Max
Денис Мощенко
Денис Мощенко
658
Лучший ответ
во на этом сайте такие запросы что я сам офигел))

select
имя производителя,
case when exists /*проверяем наличие нул-цены*/
(
select 1
from
(select * from
производитель p1
inner join PC pc1
on по равенству айди
union
select * from
производитель p2
inner join Laptop l2
on по равенству айди
union
select * from
производитель p3
inner join Printer pr3
on по равенству айди
)
where цена is null
)
then null
else
(
select max(цена) /*выбераем макс цену*/
from
(select * from
производитель p1
inner join PC pc1
on по равенству айди
union
select * from
производитель p2
inner join Laptop l2
on по равенству айди
union
select * from
производитель p3
inner join Printer pr3
on по равенству айди
)
)
end as price
from производитель Make1

where /*проверяем наличие кореллироваными подзапросами*/
exists (select 1 from PC tt where Make1.айди=tt.айди)
and
exists (select 1 from Laptop tt where Make1.айди=tt.айди)
and
exists (select 1 from Printer tt where Make1.айди=tt.айди)
Вадим Новиков
Вадим Новиков
17 648
WITH t1 AS (SELECT DISTINCT a.maker, b.model, b.price FROM product a JOIN laptop b ON a.model = b.model
UNION
SELECT DISTINCT c.maker, d.model, d.price FROM product c JOIN pc d ON c.model = d.model
UNION
SELECT DISTINCT ab.maker, ba.model, ba.price FROM product ab JOIN printer ba ON ab.model = ba.model)

SELECT DISTINCT maker, CASE
WHEN maker IN (SELECT DISTINCT maker FROM t1 WHERE price IS NULL)
THEN NULL
ELSE MAX(price)
END price
FROM t1 GROUP BY maker