我的表格包含以下数据
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 ......
你能解释一下吗?
答案 0 :(得分:9)
答案 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 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**
只需制作自己的表并检查结果