2008-08-05 4 views
26

Я знаю, что мне нужно (хотя я не знаю почему) предложение GROUP BY в конце SQL-запроса, которое использует любые агрегированные функции, такие как count, sum, avg и т. Д. :Как использовать группу T-SQL?

SELECT count(userID), userName 
FROM users 
GROUP BY userName 

Когда еще будет GROUP BY быть полезным, и каковы последствия производительности?

+0

Обратите внимание, что «GROUP BY» не заказывает результирующий набор. Если вам нужен конкретный заказ, добавьте ORDER BY слишком – 2011-09-27 05:21:18

ответ

28

Чтобы получить количество виджетов из каждой категории виджет, который имеет более чем 5 виджетов, вы можете сделать это:

SELECT WidgetCategory, count(*) 
FROM Widgets 
GROUP BY WidgetCategory 
HAVING count(*) > 5 

«имеющий» положение то, что люди часто забывают о том, а не выбирают, чтобы получить все их данные клиенту и итерации через него там.

1

Подсчет количество раз тегов, используемых может быть примером Google:

SELECT TagName, Count(*) 
AS TimesUsed 
FROM Tags 
GROUP BY TagName ORDER TimesUsed 

Если вы просто хотите определенное значение тегов, я бы предпочел использовать DISTINCT заявление.

SELECT DISTINCT TagName 
FROM Tags 
ORDER BY TagName ASC 
0

GROUP BY также помогает, когда вы хотите сгенерировать отчет, который будет усреднять или суммировать кучу данных. Вы можете GROUP по идентификатору отдела, а SUM - все доходы от продаж или AVG - количество продаж за каждый месяц.

1

Группа Заставляет весь набор заполняться до того, как будут возвращены записи (поскольку это неявный вид).

По этой причине (и многие другие) никогда не используйте группу By в подзапросе.

12

GROUP BY аналогичен DISTINCT, в котором он объединяет несколько записей в один.

В этом примере, взятом из http://www.devguru.com/technologies/t-sql/7080.asp, перечислены отдельные продукты в таблице Products.

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 
+1

очень удивительно простой пример: это +1 – user96403 2011-10-07 10:30:46

Смежные вопросы