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

голоса
28

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

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

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

Задан 05/08/2008 в 19:55
источник пользователем
На других языках...                            


5 ответов

голоса
30

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

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

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

Ответил 05/08/2008 в 20:32
источник пользователем

голоса
13

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
Ответил 19/08/2008 в 15:02
источник пользователем

голоса
3

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

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

Ответил 05/08/2008 в 20:01
источник пользователем

голоса
2

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

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

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

SELECT DISTINCT TagName
FROM Tags
ORDER BY TagName ASC
Ответил 05/08/2008 в 19:58
источник пользователем

голоса
0

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

Ответил 05/08/2008 в 20:00
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more