Hoe gebruik ek T-SQL Groep Deur
-
08-06-2019 - |
Vra
Ek weet wat ek nodig het om te hê (alhoewel ek weet nie hoekom) 'n GROUP BY
klousule op die einde van 'n SQL navraag dat enige totaal funksies gebruik soos count
, sum
, avg
, ens:
SELECT count(userID), userName
FROM users
GROUP BY userName
Wanneer anders sou GROUP BY
wees bruikbare, en wat is die prestasie gevolge?
Oplossing
Om die aantal widgets uit elke kategorie widget wat meer as 5 widgets het haal, kan jy dit doen:
SELECT WidgetCategory, count(*)
FROM Widgets
GROUP BY WidgetCategory
HAVING count(*) > 5
Die "met" klousule is iets wat mense dikwels vergeet, in plaas kies om al hul data aan die kliënt te haal en iterating deur dit daar.
Ander wenke
GROUP BY is soortgelyk aan DISTINCT in dat dit groepe verskeie rekords in een.
Hierdie voorbeeld, geleen van http://www.devguru.com/technologies /t-sql/7080.asp , lys duidelike produkte in die produkte tafel.
SELECT Product FROM Products GROUP BY Product
Product
-------------
Desktop
Laptop
Mouse
Network Card
Hard Drive
Software
Book
Accessory
Die voordeel van GROEP met meer as afsonderlike, is dat dit jou korrel beheer kan gee wanneer dit gebruik word met 'n WAT klousule.
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
Groep Deur magte die hele stel om bevolk voor rekords teruggekeer (want dit is 'n implisiete soort).
Om dié rede (en baie ander), nooit gebruik 'n groep in 'n subquery.
Tel die aantal kere tags gebruik kan 'n Google voorbeeld wees:
SELECT TagName, Count(*)
AS TimesUsed
FROM Tags
GROUP BY TagName ORDER TimesUsed
As jy wil net 'n duidelike waarde van etikette, sou ek verkies om die DISTINCT
verklaring gebruik.
SELECT DISTINCT TagName
FROM Tags
ORDER BY TagName ASC
GROUP BY help ook as jy wil 'n verslag wat sal gemiddeld of som 'n klomp van die data te genereer. Jy kan GROEP deur die Departement ID en die som al die omset of AVG die telling van verkope vir elke maand.