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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top