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

2 番目のクエリではDISTINCT、DEPTID について指定しましたが、重複した DEPTID を取得したのはなぜですか...

これについて説明していただけますか?

4

7 に答える 7

10

DISTINCT行の繰り返しをなくします。 GROUP BY一意のレコードをグループ化し、集計関数を実行できるようにします。

于 2009-11-12T05:38:53.000 に答える
6

DISTINCTレコード内の個別のフィールドではなく、個別のレコード全体を参照してください。

于 2009-11-12T05:37:47.323 に答える
1

すべての列によるグループ化と個別化によって Teradata で同じ結果が得られますが、バックグラウンドで異なるアルゴリズムが使用されているため、通常、個別化を使用するよりもグループ化を使用した方がパフォーマンスが向上します。両方を同じ方法で実装する計画があったと思いますが、使用しているバージョン (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 に答える