loading..
Русский    English
16:42
листать

Упражнение 56 стр. 4

Решение 3.12.4

Консоль
Выполнить
  1. SELECT class, SUM(sunks) sunks
  2. FROM (SELECT cl.class, 1 sunks
  3.       FROM Classes cl LEFT JOIN
  4.            Ships sh ON cl.class = sh.class INNER JOIN
  5.            Outcomes ou ON ou.ship = sh.name OR
  6.                           ou.ship = cl.class
  7.            WHERE result='sunk'
  8.        UNION
  9.        SELECT DISTINCT class, 0 sunks
  10.        FROM classes
  11.       ) tab
  12. GROUP BY class;

В первом из объединяемых запросов предложения FROM для каждого потопленного корабля в результирующий набор попадает строка:

Класс           1

В основном запросе эти «единички» суммируются. Но поскольку UNION устраняет дубликаты, то для любого количества потопленных кораблей в классе мы, в конечном итоге получим либо 1 (из этого первого запроса), либо 0 из второго, который учитывает классы, не имеющие потопленных кораблей.

Если же выполнить объединение при помощи UNION ALL, то придем к решению 3.12.2, которое содержит аналогичную ошибку.


Bookmark and Share
Страницы: 1 2 3 4 5
Тэги:
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/WMB-WMR/
©SQL-EX,2008 [Развитие] [Связь] [О проекте] [Ссылки] [Team]
Перепечатка материалов сайта возможна только с разрешения автора.
Rambler's Top100