SQL: группа BY в союзе против группы BY в союзе все - PullRequest
0 голосов
/ 04 июня 2018

В SQL я не могу решить, использовать ли Union или Union All с использованием Group By в Union All. Удаляет дубликаты записей?или целесообразно использовать Union с Group By

Ответы [ 3 ]

0 голосов
/ 04 июня 2018

GROUP BY будет удалять дубликаты в каждом подзапросе, но UNION будет удалять дубликаты среди подзапросов.Например, это даст только уникальные имена в таблицах ClientList1 и ClientList2:

SELECT [Name] FROM ClientList1 GROUP BY [Name]
UNION
SELECT [Name] FROM ClientList2 GROUP BY [Name]

Но это будет включать имена, которые существуют в ОБАХ таблицах:

SELECT [Name] FROM ClientList1 GROUP BY [Name]
UNION ALL
SELECT [Name] FROM ClientList2 GROUP BY [Name]
0 голосов
/ 05 июня 2018

Основой выбора между UNION и UNION ALL является то, что UNION занимает больше времени, но может удалить некоторые дубликаты.Если вы ожидаете, что у вас не будет дубликатов, которые UNION будет удален, или если эти дубликаты будут в порядке, используйте UNION ALL

0 голосов
/ 04 июня 2018

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

Группировка по больше используется, когда вы пытаетесь объединить некоторые данные.Например, с Sum (), Min () Max (), этот тип вещи.Если вы не производите агрегацию, вам не понадобится группировать по ().Если вы выполняете агрегацию в рамках одного или нескольких запросов внутри объединения, вам понадобится как UNION, так и Group By.

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

...