В чем разница между GROUP BY и DISTINCT? - PullRequest
4 голосов
/ 12 ноября 2009

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

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

Не могли бы вы объяснить это?

Ответы [ 7 ]

9 голосов
/ 12 ноября 2009

DISTINCT исключает повторяющиеся строки. GROUP BY группирует уникальные записи и позволяет выполнять агрегатные функции.

6 голосов
/ 12 ноября 2009

DISTINCT относится к отдельным записям в целом, а не к отдельным полям в записи.

2 голосов
/ 13 марта 2013

DISTINCT работает только на весь ряд. Не заблуждайтесь, думая, SELECT DISTINCT(A), B делает что-то другое. Это эквивалентно SELECT DISTINCT A, B

1 голос
/ 13 ноября 2009

Несмотря на то, что группировка по всем столбцам и различиям даст вам одинаковые результаты в Teradata, у них разные закулисные алгоритмы, и в целом вы получите более высокую производительность от использования группы, чем от использования различных. Я полагаю, что планировалось реализовать оба варианта одинаково, но они все еще различаются в версии, которую я использую (v2r6), и я еще не пробовал на Teradata 12.

0 голосов
/ 15 марта 2014

Я не знаю, как объяснить разницу, но я дам вам _with_queries_ примеры, с помощью которых вы можете лучше понять разницу между GROUP BY и DISTINCT.

Вопрос: Сколько людей в каждом уникальном штате в таблице клиентов

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

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

0 голосов
/ 13 марта 2013

Group By и Distinct будут работать одинаково. Сравнение с Distinct Group By Дает хорошую производительность, поскольку обрабатывает меньше строк и занимает меньше памяти буфера

0 голосов
/ 10 февраля 2010

Distinct не будет работать нормально с несколькими столбцами. хотя дано отдельно для одного столбца, но дает уникальную комбинацию указанных столбцов.

Таким образом, Group by предоставляет уникальные записи и может также выполнять агрегирование.

...