Текст задания:
Перечислите номера моделей любых типов, имеющих самую высокую цену по всей имеющейся в базе данных продукции.
Перечислите номера моделей любых типов, имеющих самую высокую цену по всей имеющейся в базе данных продукции.
Решение:
SELECT model
FROM (
SELECT model, price
FROM pc
UNION
SELECT model, price
FROM Laptop
UNION
SELECT model, price
FROM Printer
) t1
WHERE price = (
SELECT MAX(price)
FROM (
SELECT price
FROM pc
UNION
SELECT price
FROM Laptop
UNION
SELECT price
FROM Printer
) t2
);
Анализ плана выполнения запроса:
Стоимость: 0.043207447975874.
Количество операций: 12.
Стоимость: 0.043207447975874.
Количество операций: 12.
WITH model AS ( SELECT model FROM Product ),
ОтветитьУдалитьprice AS (SELECT model, MAX(price) AS price FROM PC
GROUP BY model
UNION ALL
SELECT model, MAX(price) FROM Laptop
GROUP BY model
UNION ALL
SELECT model, MAX(price) FROM Printer
GROUP BY model)
SELECT m.model FROM
model m INNER JOIN price p
ON m.model = p.model
WHERE p.price = (SELECT MAX(price) FROM price)
будьте здоровы, написавшие эти ответы. Я с этим заданием 2 часа страдал :)
ОтветитьУдалитьА зачем после создания первой таблицы после скобок нужно писать t1?
ОтветитьУдалитьЯ понимаю что без него оно работать не будет но не понимаю почему
Потому что по факту ты создаешь абстарктную таблицу, для которой нужно присвоить название
Удалитьwith model_count as (
ОтветитьУдалитьselect model, price as max_price from pc
union all
select model, price as max_price from laptop
union all
select model, price as max_price from printer)
select distinct model from model_count where max_price = (select max(max_price) from model_count)