Сведения о вопросе

DUNKER

16:03, 1st July, 2020

Теги

sql   sql-server   group-by    

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

Просмотров: 380   Ответов: 5

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

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

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



  Сведения об ответе

$DOLLAR

18:03, 1st July, 2020

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

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

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


  Сведения об ответе

SSESION

18:03, 1st July, 2020

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


  Сведения об ответе

pumpa

18:03, 1st July, 2020

Group By заставляет весь набор заполняться до возвращения записей (поскольку это неявная сортировка).

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


  Сведения об ответе

LAST

18:03, 1st July, 2020

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

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

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

SELECT DISTINCT TagName
FROM Tags
ORDER BY TagName ASC


  Сведения об ответе

ASSembler

18:03, 1st July, 2020

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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться