Come si utilizza T-SQL Raggruppa per
-
08-06-2019 - |
Domanda
So che devo avere (anche se non so perché) a GROUP BY
clausola alla fine di una query SQL che utilizza funzioni aggregate come count
, sum
, avg
, eccetera:
SELECT count(userID), userName
FROM users
GROUP BY userName
Quando altrimenti lo farebbe GROUP BY
essere utile e quali sono le conseguenze sulle prestazioni?
Soluzione
Per recuperare il numero di widget da ciascuna categoria di widget che ha più di 5 widget, puoi procedere in questo modo:
SELECT WidgetCategory, count(*)
FROM Widgets
GROUP BY WidgetCategory
HAVING count(*) > 5
La clausola "avere" è qualcosa di cui le persone spesso dimenticano, optando invece per recuperare tutti i propri dati sul client e ripeterli lì.
Altri suggerimenti
GROUP BY è simile a DISTINCT in quanto raggruppa più record in uno solo.
Questo esempio, preso in prestito da http://www.devguru.com/technologies/t-sql/7080.asp, elenca prodotti distinti nella tabella Prodotti.
SELECT Product FROM Products GROUP BY Product
Product
-------------
Desktop
Laptop
Mouse
Network Card
Hard Drive
Software
Book
Accessory
Il vantaggio di GROUP BY rispetto a DISTINCT è che può fornire un controllo granulare se utilizzato con una clausola 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
Raggruppa per impone il popolamento dell'intero set prima della restituzione dei record (poiché si tratta di un ordinamento implicito).
Per questo motivo (e molti altri), non utilizzare mai Raggruppa per in una sottoquery.
Il conteggio del numero di volte in cui vengono utilizzati i tag potrebbe essere un esempio di Google:
SELECT TagName, Count(*)
AS TimesUsed
FROM Tags
GROUP BY TagName ORDER TimesUsed
Se desideri semplicemente un valore distinto dei tag, preferirei utilizzare il file DISTINCT
dichiarazione.
SELECT DISTINCT TagName
FROM Tags
ORDER BY TagName ASC
GRUPPO PER aiuta anche quando desideri generare un rapporto che medierà o sommerà una serie di dati.Puoi RAGGRUPPARE per ID reparto e SOMMA tutti i ricavi delle vendite o AVG il conteggio delle vendite per ogni mese.