Hvordan bruker jeg T-SQL Grupper etter

stemmer
28

Jeg vet at jeg trenger å ha (selv om jeg ikke vet hvorfor) en GROUP BYklausul på slutten av en SQL-spørring som bruker noen samlede funksjoner som count, sum, avg, etc:

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

Når ellers ville GROUP BYvære nyttig, og hva er ytelses konsekvenser?

Publisert på 05/08/2008 klokken 18:55
kilden bruker
På andre språk...                            


5 svar

stemmer
31

For å hente antall widgets fra hver widget kategori som har mer enn 5 widgets, kan du gjøre dette:

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

Den "ha" klausulen er noe folk ofte glemmer, i stedet velger å hente alle sine data til klienten og gjentar gjennom det der.

Svarte 05/08/2008 kl. 19:32
kilden bruker

stemmer
13

GROUP BY ligner DISTINCT ved at det grupper flere poster til én.

Dette eksemplet, lånt fra http://www.devguru.com/technologies/t-sql/7080.asp , viser forskjellige produkter i Produkter tabellen.

SELECT Product FROM Products GROUP BY Product

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

Fordelen med GROUP BY løpet DISTINCT, er at det kan gi deg detaljert kontroll når det brukes med en HAR klausul.

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
Svarte 19/08/2008 kl. 14:02
kilden bruker

stemmer
3

Grupper etter krefter hele settet å være befolket før poster blir returnert (siden det er en implisitt form).

Av den grunn (og mange andre), aldri bruke en gruppe ved i en delspørring.

Svarte 05/08/2008 kl. 19:01
kilden bruker

stemmer
2

Telle antall ganger koder brukes kan være et google eksempel:

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

Hvis du bare vil ha en distinkt verdi av koder, ville jeg foretrekker å bruke den DISTINCTsetningen.

SELECT DISTINCT TagName
FROM Tags
ORDER BY TagName ASC
Svarte 05/08/2008 kl. 18:58
kilden bruker

stemmer
0

GROUP BY hjelper også når du vil generere en rapport som vil gjennomsnittlig eller oppsummere en haug av data. Du kan gruppere Ved Institutt ID og SUM alle salgsinntektene eller AVG telling av salg for hver måned.

Svarte 05/08/2008 kl. 19:00
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more