loading..
Русский    English
17:01
листать

Упражнение 25 стр. 1

Найдите производителей принтеров, которые производят ПК с наименьшим объемом RAM и с самым быстрым процессором среди всех ПК, имеющих наименьший объем RAM. Вывести: Maker

Ключевой здесь является фраза «имеющих наименьший объем RAM». Она не избыточна, как это может показаться на первый взгляд. Не достаточно найти все модели, имеющие максимальную скорость среди ПК с минимальной RAM.

Поясним сказанное демонстрацией неправильных решений. Для этой задачи их немало накопилось. Вот первый пример.

Решение 1.17.1

Консоль
Выполнить
  1. SELECT c.maker
  2. FROM Product c,
  3.      (SELECT b.model, MAX(b.speed) speed
  4.       FROM PC b
  5.       WHERE b.ram IN (SELECT MIN(a.ram)
  6.                       FROM PC a
  7.                       )
  8.       GROUP BY b.model
  9.       ) t
  10. WHERE c.model = t.model AND
  11.       EXISTS (SELECT d.model
  12.               FROM Printer d, Product e
  13.               WHERE d.model = e.model AND
  14.                     e.maker = c.maker
  15.               );

1. Ошибка в подзапросе

  1. (SELECT b.model, MAX(b.speed) speed
  2. FROM PC b
  3. WHERE b.ram IN (SELECT MIN(a.ram)
  4.                 FROM PC a
  5.                 )
  6. GROUP BY b.model
  7. ) t

Здесь выбираются модели ПК с минимальной памятью, и для каждой такой модели определяется ПК с максимальной скоростью. Ошибка состоит в том, что максимальную скорость нужно определять по всем ПК с минимальной памятью, а не по каждой модели. Кроме того, если у производителя будет две модели с минимальной памятью, то он дважды попадет в результирующий набор, так как в запросе отсутствует устранение дубликатов (DISTINCT, например).

2. Ошибка в определении производителей принтеров

  1. AND EXISTS (SELECT d.model
  2.             FROM Printer d, Product e
  3.             WHERE d.model=e.model AND
  4.                   e.maker = c.maker
  5.             )

Мы уже обсуждали этот вопрос (пункт 1.2).

3. Однако мы еще не выявили главной ошибки решения, которую лучше проанализировать, устранив предыдущие. В следующем решении устранены дубликаты, правильно определены производители принтеров, а также находится глобальный максимум по скорости среди моделей с минимальной памятью.

Решение 1.17.2

Консоль
Выполнить
  1. SELECT DISTINCT maker
  2. FROM Product
  3. WHERE type = 'printer' AND
  4.       maker IN(SELECT maker
  5.                FROM Product
  6.                WHERE model IN(SELECT model
  7.                               FROM PC
  8.                               WHERE speed = (SELECT MAX(speed)
  9.                                              FROM (SELECT speed
  10.                                                    FROM PC
  11.                                                    WHERE ram=(SELECT MIN(ram)
  12.                                                               FROM PC
  13.                                                               )
  14.                                                    ) AS z4
  15.                                              )
  16.                               )
  17.                );

Вот как определяется здесь максимум по скорости среди моделей с минимальной памятью:

  1. speed = (SELECT MAX(speed)
  2.          FROM (SELECT speed
  3.                FROM PC
  4.                WHERE ram = (SELECT MIN(ram)
  5.                             FROM PC
  6.                             )
  7.                ) AS z4
  8.                     )

Страницы: 1 2
Тэги:
ALL AND AUTO_INCREMENT AVG battles CASE CAST CHAR CHARINDEX CHECK classes COALESCE CONSTRAINT Convert COUNT CROSS APPLY CTE DATEADD DATEDIFF DATENAME DATEPART DATETIME DDL DEFAULT DELETE DISTINCT DML EXCEPT EXISTS EXTRACT FOREIGN KEY FROM FULL JOIN GROUP BY Guadalcanal HAVING IDENTITY IN INFORMATION_SCHEMA INNER JOIN insert INTERSECT IS NOT NULL IS NULL ISNULL laptop LEFT LEFT OUTER JOIN LEN maker Больше тэгов
Учебник обновлялся
несколько дней назад
продажа monero
©SQL-EX,2008 [Развитие] [Связь] [О проекте] [Ссылки] [Team]
Перепечатка материалов сайта возможна только с разрешения автора.