Вопрос

Я знаю, что мне нужно (хотя я не знаю почему) 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 приводит к заполнению всего набора перед возвратом записей (поскольку это неявная сортировка).

По этой причине (и по многим другим) никогда не используйте 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 также помогает, когда вы хотите создать отчет, который будет усреднять или суммировать множество данных.Вы можете ГРУППИРОВАТЬ по идентификатору отдела и СУММЕ весь доход от продаж или AVG количество продаж за каждый месяц.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top