В чем разница между GROUP BY и DISTINCT?
Вопрос
У меня есть таблица со следующими данными
empid empname deptid address
--------------------------------
aa76 John 6 34567
aa75 rob 4 23456
aa71 smith 3 12345
aa74 dave 2 12345
a77 blake 2 12345
aa73 andrew 3 12345
aa90 sam 1 12345
aa72 will 6 34567
aa70 rahul 5 34567
Я использовал следующие запросы:
select deptid, EMPID ,EMPNAME ,ADDRESS
from mytable
group by 1,2,3,4
Что дает результат:
deptid empid empname address
------------------------------
1 aa90 sam 12345
2 aa74 dave 12345
2 aa77 blake 12345
3 aa71 smith 12345
3 aa73 andrew 12345
4 aa75 rob 23456
5 aa70 rahul 34567
6 aa76 John 34567
6 aa72 will 34567
И для запроса:
select distinct (deptid),EMPID,EMPNAME,ADDRESS
from mytable
Результирующий набор таков:
deptid empid empname address
----------------------------
1 aa90 sam 12345
2 aa74 dave 12345
2 aa77 blake 12345
3 aa71 smith 12345
3 aa73 andrew 12345
4 aa75 rob 23456
5 aa70 rahul 34567
6 aa72 will 34567
6 aa76 John 34567
Однако во втором запросе я дал DISTINCT
что касается DEPTID, то как получилось, что я получил дубликат DEPTID?..
Не могли бы вы это объяснить?
Решение
DISTINCT
обращайтесь к различным записям в целом, а не к отдельным полям в записи.
Другие советы
DISTINCT
работает только для всей строки.Не позволяйте ввести себя в заблуждение, заставляя думать SELECT DISTINCT(A), B
делает что-то другое.Это эквивалентно SELECT DISTINCT A, B
Хотя group by all columns и distinct дадут вам одинаковые результаты в Teradata, за кулисами у них разные алгоритмы, и вы, как правило, получите лучшую производительность от использования group by, чем от использования distinct.Я полагаю, что планировалось реализовать оба варианта одинаково, но они все еще отличаются в версии, которую я использую (v2r6), и я еще не пробовал использовать Teradata 12.
Group By и Distinct будут работать одинаково.Сравнение с Distinct Group By дает хорошую производительность, поскольку оно обрабатывает меньше строк и занимает меньше буферной памяти
Distinct не будет нормально работать с несколькими столбцами.хотя данный параметр различен для одного столбца, но он дает уникальную комбинацию указанных столбцов.
Итак, Group by предоставляет уникальные записи и также может выполнять агрегирование.
Я не знаю, как объяснить разницу, но я привожу вам примеры _with_queries_ благодаря этому вы сможете лучше понять разницу между GROUP BY
и DISTINCT
.
Вопрос:Сколько людей находится в каждом уникальном состоянии в таблице customers
select distinct(state), count(*) from customers;
RESULT
Washington 17
----------------------------------------------------------
select State, count(*) from customers GROUP BY STATE;
RESULT
**Arizona 6
Colorado 2
Hawaii 1
Idaho 1
North Carolina 1
Oregon 2
Sourth Carolina 1
Washington 2
Wisconsin 1**
Просто составьте свою собственную таблицу и проверьте результат