loading..
Русский    English
06:58
листать

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

Найдите номер модели продукта (ПК, ПК-блокнота или принтера), имеющего самую высокую цену. Вывести: model

Вот ошибочное решение, которое какое-то время назад принималось проверочной системой сайта:

Решение 1.16.1

Консоль
Выполнить
  1. SELECT  model
  2. FROM (SELECT  model, price
  3.       FROM PC
  4.       WHERE price = (SELECT MAX(price)
  5.                      FROM PC
  6.                      )
  7.       UNION
  8.       SELECT  model,  price
  9.       FROM Laptop
  10.       WHERE price = (SELECT MAX(price)
  11.                      FROM Laptop
  12.                      )
  13.       UNION
  14.       SELECT  model,  price
  15.       FROM Printer
  16.       WHERE price = (SELECT MAX(price)
  17.                      FROM Printer
  18.                      )
  19.       ) T
  20. WHERE price = (SELECT MAX(price)
  21.                FROM Laptop
  22.                );

Давайте разберемся, какие данные должны быть в проверочной базе, чтобы блокировались такие решения.

Но сначала посмотрим, что же делает этот запрос. В каждом из трех аналогичных подзапросов разыскиваются максимальные по цене модели по каждому из трех видов продукции — ПК, портативным компьютерам и принтерам. Далее используется оператор UNION для объединения найденных моделей, что, помимо этого, устраняет дубликаты строк модель, цена. Наконец, отбираются только те модели, цена которых совпадает с максимальной ценой на портативные компьютеры.

Поэтому, если максимальной окажется цена на принтеры, то данное решение не будет приниматься системой. Но тогда будет приниматься решение, в котором условие отбора будет следующим:

  1. WHERE price = (SELECT MAX(price)
  2.                FROM Printer
  3.                )

Более того, если максимальная цена будет у моделей только одного типа продукции (скажем, принтеров), то будет приниматься еще более неправильно решение:

Решение 1.16.2

Консоль
Выполнить
  1. SELECT   DISTINCT  model FROM Printer
  2. WHERE price = (SELECT MAX(price)
  3.                FROM Printer
  4.                );

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

Кстати говоря, данные проверочной базы подобраны оптимально к рассматриваемым случаям, но, тем не менее, не спасают от «принятия» неправильных решений.

Выход, и не только для данной ситуации, можно найти в увеличении количества проверочных баз, где будут смоделированы различные варианты данных. Однако это замедлит работу системы, в результате чего пользователь будет дольше находиться в состоянии ожидания ответа. Отказываясь от увеличения числа проверочных баз данных, автор успокаивает себя мыслью, что посетителями сайта движет желание изучить язык  Язык структурированных запросов) — универсальный компьютерный язык, применяемый для создания, модификации и управления данными в реляционных базах данных. SQL и повысить квалификацию, а не стремление обмануть систему.


Bookmark and Share
Страницы: 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 INNER JOIN insert INTERSECT IS NOT NULL IS NULL ISNULL laptop LEFT LEFT OUTER JOIN LEN maker MAX Больше тэгов
Учебник обновлялся
вчера
©SQL-EX,2008 [Развитие] [Связь] [О проекте] [Ссылки] [Team]
Перепечатка материалов сайта возможна только с разрешения автора.
Rambler's Top100