Подтвердить что ты не робот

Как использовать T-SQL Group By

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

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

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

4b9b3361

Ответ 1

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

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

Предложение "having" - это то, о чем люди часто забывают, вместо этого предпочитая извлекать все свои данные клиенту и итерации через него там.

Ответ 2

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 over 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

Ответ 3

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

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

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

SELECT DISTINCT TagName
FROM Tags
ORDER BY TagName ASC

Ответ 4

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

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

Ответ 5

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