loading..
Русский    English
02:24
листать

Упражнение (-2) (подсказки и решения) стр. 2

Решение 4.19.2

Консоль
Выполнить
  1. SELECT * FROM (SELECT launched [year], COUNT(*) cnt
  2.                FROM  Ships
  3.                WHERE launched IS NOT NULL
  4.                GROUP BY launched
  5.                ) x
  6. WHERE cnt >= ALL(SELECT COUNT(*) cnt
  7.                  FROM  Ships
  8.                  WHERE launched IS NOT NULL
  9.                  GROUP BY launched
  10.                  );

В подзапросе предложения WHERE проверку на NULL-значения можно не выполнять, если использовать вместо функции COUNT(*) функцию COUNT(launched), поскольку в этом случае будут подсчитаны только корабли с известным годом спуска на воду:

  1. WHERE cnt >= ALL(SELECT COUNT(launched) cnt
  2.                  FROM Ships
  3.                  GROUP BY launched
  4.                  )

Для всех же кораблей с неизвестным годом спуска на воду будет получена строка со значением 0, так как если в наборе нет ни одной записи, то функция COUNT возвращает именно это значение. Последнее не должно нас смущать, поскольку количество кораблей в основном запросе больше нуля, если есть хотя бы один корабль с известным годом спуска на воду. Аналогичным образом можно поступить и в основном запросе, что позволит получить более краткую форму решения:

Решение 4.19.3

Консоль
Выполнить
  1. SELECT * FROM (SELECT launched [year], COUNT(launched) cnt
  2.                FROM Ships
  3.                GROUP BY launched
  4.                ) x
  5. WHERE cnt >= ALL(SELECT COUNT(launched) cnt
  6.                  FROM Ships
  7.                  GROUP BY launched
  8.                  );

Справедливости ради следует отметить, что стоимость решения 4.19.3 по его плану выполнения в  Cистема управления реляционными базами данных (СУБД), разработанная корпорацией Microsoft. Язык структурированных запросов) — универсальный компьютерный язык, применяемый для создания, модификации и управления данными в реляционных базах данных. SQL Server 2000 будет незначительно уступать (в третьей значащей цифре) стоимости решения 4.19.2.

Примечание:

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

Вернуться к обсуждению упражнения (-2)

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


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