Задание: 41 (Serge I: 2019-05-31)
Для каждого производителя, у которого присутствуют модели хотя бы в одной из таблиц PC, Laptop или Printer,
определить максимальную цену на его продукцию.
Вывод: имя производителя, если среди цен на продукцию данного производителя присутствует NULL, то выводить для этого производителя NULL,
иначе максимальную цену.
SQL
SQL-ex 41 задание. Не получается
Max
во на этом сайте такие запросы что я сам офигел))
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.айди)
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.айди)
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
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
Похожие вопросы
- Задание 68 - Sql-academy
- SQL. Выводятся не все данные. 4 задача.
- Чем отличаются разные SQL?
- Не очень понятен синтаксис запросов SQL
- Помогите написать sql запросы
- Вопрос по SQL + Python
- Что делает кусок коды, выделенный синим? SQL
- Подскажите, есть ли такое понятие чистый SQL???
- Microsoft SQL. Процедура вывода максимального количества товаров за определенную сумму
- Вопрос по SQL. Помогите понять решение задачи