【发布时间】:2010-12-15 18:15:43
【问题描述】:
我有以下数据的表格
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...
你能解释一下吗?
【问题讨论】:
-
我想你需要先解释一下你期待什么结果? DISTINCT 适用于所有列。因此,即使 deptid 相同,您的第二个查询也会为您提供 2 个唯一的数据行。将 GROUP BY 用于计数或求和等聚合函数。
-
在 SELECT 子句中按位置引用列称为序数。 IE:
group by 1,2,3,4- 如果 SELECT 列发生变化,不建议这样做。 -
作为旁注;在 Teradata 13.10(和更早版本)上,使用 DISTINCT 可能会导致排序操作,这比 GROUP BY 慢。因此,从性能的角度来看,应该尽可能选择 GROUP BY 而不是 DISTINCT。我认为这在 14.10 版本中已修复。