Я знаю , что нужно иметь (хотя я не знаю , почему) в 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
Условие «иметь» - это то, о чем люди часто забывают, вместо этого они предпочитают получать все свои данные клиенту и повторять их там.
Подсчет количества использованных тегов может быть примером 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 также помогает, когда вы хотите создать отчет, который будет усреднять или суммировать кучу данных. Вы можете Сгруппировать по ID отдела и СУММЕ весь доход от продаж или AVG подсчитать объем продаж за каждый месяц.
Group By принудительно заполняет весь набор перед возвратом записей (поскольку это неявная сортировка).
По этой причине (и многим другим) никогда не используйте Group By в подзапросе.
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