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

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

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

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

Обратите внимание, что «GROUP BY» не упорядочивает набор результатов. Если вам нужен конкретный заказ, добавьте также ORDER BY

David Gardiner 27.09.2011 09:21

Лучше всего сказать, что стандарт SQL не гарантирует никакого упорядочивания при его использовании ... Но как реализовать группировку без упорядочивания? Все реализации, которые я видел, используют какой-то порядок и почти всегда возвращают результаты по порядку в качестве побочного эффекта.

Stu 15.06.2018 10:54
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
32
2
48 187
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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 также помогает, когда вы хотите создать отчет, который будет усреднять или суммировать набор данных. Вы можете ГРУППИРОВАТЬ по идентификатору отдела и СУММУ всей выручки от продаж или СРЕДНЕМУ по количеству продаж за каждый месяц.

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

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

Боже, я думаю, ты единственный, кто ответил на аспект "спектакль" вопроса. +1

MickyD 09.05.2018 04:15
Ответ принят как подходящий

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

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

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

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

Другие вопросы по теме