Вопрос

У меня есть таблица со следующими данными

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 устраняет повторяющиеся строки. GROUP BY группирует уникальные записи и позволяет выполнять агрегированные функции.

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**

Просто составьте свою собственную таблицу и проверьте результат

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top