loading..
Русский    English
22:48
листать

Упражнение 16

Найдите пары моделей PC, имеющих одинаковые скорость и RAM. В результате каждая пара указывается только один раз, то есть (i,j), но не (j,i), Порядок вывода: модель с большим номером, модель с меньшим номером, скорость и RAM

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

Решение 1.12.1

Консоль
Выполнить
  1. SELECT MAX(model) AS 'model', MIN(model) AS 'model', speed, ram
  2. FROM PC
  3. GROUP BY speed, ram
  4. HAVING MAX(model) > MIN(model);

Не известно, по какой причине выводят только максимальную и минимальную модель для каждой совпадающей пары значений speed, ram. Возможно, в заблуждение вводит результат «правильного» запроса на основной базе.

В этой задаче требуется упорядочить все модели, а не только максимальную и минимальную. Экстремальные характеристики упомянуты для однозначности, то есть, чтобы выводить пару моделей один раз, например:

1122 1121

но не

1121 1122

То есть если, скажем, три модели — 1122, 1121, 1135 — имеют одинаковые характеристики, то вывод должен быть таким:

1135 1122
1135 1121
1122 1121

Ниже представлено почти правильное, хотя и громоздкое решение.

Решение 1.12.2

Консоль
Выполнить
  1. SELECT P.model, L.model, P.speed, P.ram
  2. FROM PC P JOIN
  3.      (SELECT speed, ram
  4.       FROM PC
  5.       GROUP BY speed, ram
  6.       HAVING SUM(speed)/speed = 2 AND
  7.              SUM(ram)/ram = 2
  8.       ) S ON P.speed = S.speed AND
  9.              P.ram = S.ram JOIN
  10.       PC L ON L.speed = S.speed AND
  11.               L.ram = S.ram AND
  12.               L.model < P.model;

Здесь в подзапросе S отбираются уникальные пары характеристик (скорость, память), совпадающие у двух ПК (SUM(speed)/speed = 2) — сумма одинаковых значений, деленная на это значение, дает количество ПК. Хотя с тем же успехом можно было написать такое предложение HAVING:

  1. HAVING COUNT(*) = 2

Подзапрос дважды соединяется с таблицей PC по этой паре характеристик. При этом второе соединение выполняется лишь для того, чтобы упорядочить модели (L.model < P.model).

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

Несмотря на то, что решение легко исправить, лучше написать его не в такой избыточной форме.

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

ПиР

Решить задачу на SQL-EX.RU

Bookmark and Share
Тэги:
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 Больше тэгов
Учебник обновлялся
месяц назад
https://exchangesumo.com/obmen/from/MONOBUAH/ . Натяжные потолки и другие разновидности отделки потолков
©SQL-EX,2008 [Развитие] [Связь] [О проекте] [Ссылки] [Team]
Перепечатка материалов сайта возможна только с разрешения автора.