пятница, 7 марта 2014 г.

Задание: 24

Текст задания:
Перечислите номера моделей любых типов, имеющих самую высокую цену по всей имеющейся в базе данных продукции.
Решение:

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.

5 комментариев:

  1. 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. будьте здоровы, написавшие эти ответы. Я с этим заданием 2 часа страдал :)

    ОтветитьУдалить
  3. А зачем после создания первой таблицы после скобок нужно писать t1?
    Я понимаю что без него оно работать не будет но не понимаю почему

    ОтветитьУдалить
    Ответы
    1. Потому что по факту ты создаешь абстарктную таблицу, для которой нужно присвоить название

      Удалить
  4. 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)

    ОтветитьУдалить