Vă mulțumim pentru susținere

Cum utilizez T-SQL Group by

Știu că trebuie să fiu (deși nu știu de ce) o clauză GROUP BY la sfârșitul unei interogări SQL care folosește orice funcție cum ar fi count , suma , avg etc:

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

Când altfel ar fi GROUP BY utilă și care sunt ramificațiile de performanță?

0
adăugat editat
Rețineți că "GROUP BY" nu ordonă setul de rezultate. Dacă aveți nevoie de o comandă specială, adăugați și ORDER BY
adăugat autor David Gardiner

5 răspunsuri

GROUP BY ajută, de asemenea, atunci când doriți să generați un raport care să medieze sau să însumeze o grămadă de date. Aveți posibilitatea să GROUP Prin ID Departament și SUM toate veniturile din vânzări sau AVG numărul de vânzări pentru fiecare lună.

0
adăugat

Numărătoarea numărului de etichete folosite poate fi un exemplu Google:

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

Dacă doriți pur și simplu o valoare distinctă a etichetelor, aș prefera să folosiți instrucțiunea DISTINCT .

SELECT DISTINCT TagName
FROM Tags
ORDER BY TagName ASC
0
adăugat

GROUP BY este similar cu DISTINCT prin aceea că grupează mai multe înregistrări într-una singură.

Acest exemplu, împrumutat de la http://www.devguru.com/technologies/t- sql / 7080.asp , afișează produse distincte în tabelul Produse.

SELECT Product FROM Products GROUP BY Product

Product
-------------
Desktop
Laptop
Mouse
Network Card
Hard Drive
Software
Book
Accessory

Avantajul GROUP BY peste DISTINCT este că vă poate oferi control granular atunci când este utilizat cu o clauză 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
0
adăugat
exemplu foarte simplu, este +1
adăugat autor user96403

Pentru a prelua numărul de widgeturi din fiecare categorie widget care are mai mult de 5 widget-uri, puteți face acest lucru:

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

Clauza de "a avea" este ceva ce oamenii uită adesea, în schimb optând să-și recupereze toate datele clientului și iterând prin el acolo.

0
adăugat

Grup Prin forțează întregul set să fie populat înainte de a fi returnate înregistrările (deoarece este un fel implicit).

Din acest motiv (și multe altele), nu utilizați niciodată un grup de grup într-o subcotare.

0
adăugat
Golly, cred că ați fost singurul care a răspuns la aspectul "performanței" al întrebării. +1
adăugat autor MickyD