كيف يمكنني استخدام T-SQL Group By
-
08-06-2019 - |
سؤال
أعلم أنني بحاجة إلى (على الرغم من أنني لا أعرف السبب) أ GROUP BY
جملة في نهاية استعلام SQL الذي يستخدم أي وظائف مجمعة مثل count
, sum
, avg
, ، إلخ:
SELECT count(userID), userName
FROM users
GROUP BY userName
متى سيحدث ذلك GROUP BY
تكون مفيدة، وما هي تداعيات الأداء؟
المحلول
لاسترداد عدد عناصر واجهة المستخدم من كل فئة عناصر واجهة مستخدم تحتوي على أكثر من 5 عناصر واجهة مستخدم، يمكنك القيام بذلك:
SELECT WidgetCategory, count(*)
FROM Widgets
GROUP BY WidgetCategory
HAVING count(*) > 5
إن شرط "الامتلاك" هو شيء غالبًا ما ينساه الناس، وبدلاً من ذلك يختارون استرداد جميع بياناتهم إلى العميل وتكرارها هناك.
نصائح أخرى
يشبه GROUP BY DISTINCT من حيث أنه يقوم بتجميع سجلات متعددة في سجل واحد.
هذا المثال مستعار من http://www.devguru.com/technologies/t-sql/7080.asp, ، يسرد المنتجات المميزة في جدول المنتجات.
SELECT Product FROM Products GROUP BY Product
Product
-------------
Desktop
Laptop
Mouse
Network Card
Hard Drive
Software
Book
Accessory
تتمثل ميزة GROUP BY على DISTINCT في أنها يمكن أن تمنحك تحكمًا دقيقًا عند استخدامها مع جملة HAVING.
SELECT Product, count(Product) as ProdCnt
FROM Products
GROUP BY Product
HAVING count(Product) > 2
Product ProdCnt
--------------------
Desktop 10
Laptop 5
Mouse 3
Network Card 9
Software 6
يفرض Group By ملء المجموعة بأكملها قبل إرجاع السجلات (نظرًا لأنه فرز ضمني).
ولهذا السبب (وغيرها الكثير)، لا تستخدم أبدًا "التجميع حسب" في استعلام فرعي.
قد يكون حساب عدد مرات استخدام العلامات مثالاً على Google:
SELECT TagName, Count(*)
AS TimesUsed
FROM Tags
GROUP BY TagName ORDER TimesUsed
إذا كنت تريد ببساطة قيمة مميزة للعلامات، فأنا أفضل استخدام DISTINCT
إفادة.
SELECT DISTINCT TagName
FROM Tags
ORDER BY TagName ASC
يساعد GROUP BY أيضًا عندما تريد إنشاء تقرير يقوم بحساب متوسط أو جمع مجموعة من البيانات.يمكنك التجميع حسب معرف القسم وSUM جميع إيرادات المبيعات أو متوسط عدد المبيعات لكل شهر.