loading..
Русский    English
18:31
листать

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

Решение 3.14.5

Консоль
Выполнить
  1. SELECT Country, AVG(bore*bore*bore)/2
  2. FROM (SELECT c.country, bore
  3. FROM Classes C,
  4. Ships S
  5. WHERE S.class = C.Class AND
  6. NOT bore IS NULL
  7. UNION ALL
  8. SELECT country, bore
  9. FROM Classes C,
  10. OutComes O
  11. WHERE O.Ship = C.Class AND
  12. NOT EXISTS (SELECT 1
  13. FROM Ships S
  14. WHERE s.Name = O.Ship
  15. ) AND
  16. NOT bore IS NULL
  17. GROUP BY country, bore
  18. ) AS Q1
  19. GROUP BY country;

В подзапросе объединяются двухатрибутные отношения {страна, калибр}. Предикат второго запроса:

  1. NOT EXISTS (SELECT 1
  2. FROM Ships S
  3. WHERE s.Name = O.Ship
  4. )
исключает возможность неоднократного учета корабля, если он присутствует в обеих таблицах — Ships и Outcomes, — что как бы оправдывает использование для объединения оператора UNION ALL. Дубликаты же в таблице Outcomes, которые могут появиться в случае участия корабля в нескольких сражениях, устраняются, по мнению автора решения, группировкой по стране и калибру.

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

Страницы: 1 2 3 4
Тэги:
ALL AVG battles CASE CAST CHAR CHARINDEX classes COALESCE Convert COUNT CTE DATEDIFF DATEPART DATETIME DELETE DISTINCT EXCEPT EXISTS EXTRACT FROM FULL JOIN GROUP BY Guadalcanal HAVING IN INNER JOIN insert INTERSECT ISNULL laptop LEFT LEFT OUTER JOIN LEN maker MAX MIN MySQL NOT IN NULL ORDER BY Outcome outcomes OVER PARTITION BY pc PIVOT PostgreSQL printer product Больше тэгов
Учебник обновлялся
несколько дней назад
©SQL-EX,2008 [Развитие] [Связь] [О проекте] [Ссылки] [Team]
Перепечатка материалов сайта возможна только с разрешения автора.
Rambler's Top100