GROUP BY和DISTINCT有什么区别?

时间:2009-11-12 05:33:39

标签: sql teradata

我的表格包含以下数据

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

在第二个查询中虽然我给了DEPTID DISTINCT,但为什么我得到重复的DEPTID ......

你能解释一下吗?

7 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:6)

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

答案 2 :(得分:2)

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

答案 3 :(得分:1)

虽然所有列和不同的分组将在Teradata中给出相同的结果,但它们在幕后具有不同的算法,通常使用group by比使用distinct更好。我相信有计划以同样的方式实现,但它们在我使用的版本(v2r6)中仍然不同,我还没有尝试过Teradata 12。

答案 4 :(得分:0)

Group By和Distinct将同时工作。比较不同的组通过提供良好的性能,因为它处理更少的行并占用更少的假脱机内存

答案 5 :(得分:-1)

对于多列,Distinct无法正常工作。虽然在单列上给出了明显的但它给出了指定列的唯一组合。

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

答案 6 :(得分:-1)

我不知道如何解释差异但我通过这个例子_with_queries_你可以更好地理解GROUP BYDISTINCT之间的区别。

问题:客户表中每个独特状态的人数

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

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