ما هو الفرق بين المجموعة وتميز؟
سؤال
لدي الجدول مع البيانات التالية
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 ...
هل يمكن أن تفسر هذا؟
المحلول
DISTINCT
الرجوع إلى السجلات المميزة ككل، وليس حقول متميزة في السجل.
نصائح أخرى
DISTINCT
يعمل فقط على الصف بأكمله. لا تخضل في التفكير SELECT DISTINCT(A), B
يفعل شيئا مختلفا. هذا يعادل SELECT DISTINCT A, B
في حين أن المجموعة من قبل جميع الأعمدة ومميزة ستمنحك نفس النتائج في Teradata، فإن لديهم خوارزميات مختلفة وراء الكواليس وستتحصل بشكل عام على أداء أفضل من استخدام المجموعة من استخدام متميزة. أعتقد أن هناك خططا لتفركتها بنفس الطريقة، لكنها لا تزال مختلفة في الإصدار الذي أستخدمه (V2R6) وأنا لم أحاول على Teradata 12 بعد.
المجموعة من قبل ومميزة كلاهما سيعمل نفسه. مقارنة المجموعة المتميزة من خلال إعطاء أداء جيد لأنها تعالج أقل صفوف وتحتل أقل ذاكرة بكرة
متميزة لن تعمل بشكل جيد مع متعدد العمود. على الرغم من أنها منحت متميزة على عمود واحد ولكنها تعطي مجموعة فريدة من الأعمدة المحددة.
لذلك، تمنح المجموعة من قبل السجلات الفريدة ويمكن أن تفعل المجاميع أيضا.
لا أعرف كيفية شرح الفرق لكنني أعطيك الأمثلة _quith_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**
فقط اصنع الجدول الخاص بك وتحقق من النتيجة