سؤال

أعلم أنني بحاجة إلى (على الرغم من أنني لا أعرف السبب) أ 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 جميع إيرادات المبيعات أو متوسط ​​عدد المبيعات لكل شهر.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top