4

我有以下数据的表

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

你能解释一下吗?

4

7 回答 7

10

DISTINCT消除重复行。 GROUP BY对唯一记录进行分组,并允许您执行聚合功能。

于 2009-11-12T05:38:53.000 回答
6

DISTINCT指的是整个不同的记录,而不是记录中的不同字段。

于 2009-11-12T05:37:47.323 回答
2

DISTINCT仅适用于整行。不要被误导认为SELECT DISTINCT(A), B做一些不同的事情。这相当于SELECT DISTINCT A, B

于 2013-03-13T10:03:34.787 回答
1

虽然 group by 所有列和 distinct 将在 Teradata 中为您提供相同的结果,但它们在幕后有不同的算法,通常使用 group by 比使用 distinct 获得更好的性能。我相信有计划以相同的方式实施,但在我使用的版本(v2r6)中它们仍然不同,而且我还没有在 Teradata 12 上尝试过。

于 2009-11-12T23:36:45.033 回答
0

Group By 和 Distinct 都将工作相同。与 Distinct Group By 相比提供了良好的性能,因为它处理的行更少并且占用的假脱机内存更少

于 2013-03-13T16:14:10.237 回答
-1

Distinct 不适用于多列。尽管在单个列上给出了不同的,但它给出了指定列的唯一组合。

因此,Group by 提供唯一记录并且也可以进行聚合。

于 2010-02-10T09:02:14.130 回答
-1

我不知道如何解释差异,但我给你的例子_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**

只需制作自己的表格并检查结果

于 2014-03-15T16:06:48.467 回答