a mai leckében megtudhatja, hogy a lekérdezésekből az SQL GROUP by klauzula segítségével visszaküldött eredményeket csoportosítja.
a mai lecke célkitűzései a következők:
- Ismerje meg, hogyan csoportosíthatja az eredményeket a csoport segítségével
- összesített funkciók segítségével számítások elvégzéséhez
- megérteni, hogyan szűrheti a csoportokat a
fontos záradék használatával! Kérjük, kövesse végig a példákat az adatbázisban. Ha még nem tette meg, iratkozzon fel az SQL Serverrel való kezdéshez szükséges útmutatóra., Kapsz utasításokat, hogyan kell telepíteni az ingyenes eszközök és minta adatbázis.
SQL-csoport
Az SQL-csoport by-záradék a megadott oszlopértékek sorának kiadására szolgál. Ez általában együtt használják aggregált funkciók, mint a SUM vagy Count összefoglalni értékeket. Az SQL csoportokban a mezők egyedi kombinációi vannak. Ahelyett, hogy visszaadná a táblázat minden sorát, amikor az értékek csoportosításra kerülnek, csak az egyedi kombinációk kerülnek vissza.
A csoport által záradék hozzáadódik az SQL utasításhoz a WHERE záradék után., Itt van egy példa, ahol felsoroljuk a SalesOrderID-t, kivéve a 100-nál nagyobb mennyiségeket.
van néhány dolog, amit meg kell jegyezni. Először is, az összefoglalni kívánt oszlopokat vesszővel elválasztva soroljuk fel a csoportban záradékkal. Másodszor, ugyanazt az oszloplistát fel kell tüntetni a select nyilatkozatban; ellenkező esetben a nyilatkozat sikertelen.,
ezen utasítás futtatásakor nem minden szűrt sor kerül visszaadásra. Az eredményben csak az értékesítés egyedi kombinációi szerepelnek. Ez a kijelentés nagyon hasonlít a
de van egy kulcsfontosságú különbség., A különálló módosító megáll a sorok egyedi kombinációjának kiadásával, míg a csoportonkénti állítással az egyes egyedi kombinációk alapjául szolgáló szűrt sorok alapján számíthatjuk ki az értékeket.
más szóval, a mi példánkban, a csoport által, tudjuk számítani a számot vagy OrderDetails rendelésenként a következő:
COUNT példa egy aggregált funkcióra, ezek azok, amelyek valóban megadják a csoportnak a különleges értékét.
SQL Aggregate Functions
egyes funkciók, mint például az összeg, a sorok egy csoportján végzett számítások elvégzésére szolgálnak, ezeket aggregált függvényeknek nevezik. A legtöbb esetben ezek a funkciók olyan értékcsoporton működnek, amelyeket a csoport által meghatározott záradék határoz meg., Ha nincs csoportonkénti záradék, akkor általában érthető, hogy az aggregált funkció minden szűrt eredményre vonatkozik.
A leggyakoribb aggregált funkciók közé tartozik:
AVG(expression) | kiszámítja a kifejezés átlagát. | |
COUNT(expression) | Count előfordulások nem null értékek által visszaadott kifejezés. | |
COUNT (*) | a megadott táblázat összes sorát számolja., | |
MIN(expression) | megtalálja a minimális kifejezésértéket. | |
MAX(expression) | megtalálja a maximális kifejezés értékét. | |
SUM(expression) | Számítsa ki a kifejezés összegét. |
ezek a funkciók önmagukban is használhatók a csoporttal együtt. Önmagukban az egész táblázatban működnek; azonban, ha a GROUP BY-val használják, számításaikat “visszaállítják” minden alkalommal, amikor a csoportosítás megváltozik., Ilyen módon altételként működnek.
egyszerű aggregált függvény
az aggregált funkció használatakor az eredményt minden értékre vagy különálló értékre kiszámíthatja. Például az összes SalesOrderDetails rekord számításához a következő kifejezést használhatjuk:
SELECT COUNT(SalesOrderID)
FROM Sales.SalesOrderDetail
Ez 121317 visszaszámlálást eredményez.
a részleteket alkotó megrendelések elkülönülésének kiszámításához a következőket használjuk:
SELECT COUNT(Distinct SalesOrderID)
FROM Sales.SalesOrderDetail
a szám most 31465.,
SQL csoport és aggregált függvények
az aggregált eszközök, hogy az egész az egyes részek. Az aggregált funkciók olyan funkciók, amelyek több mint egy sorban működnek az eredmény visszaadásához.
AVG és SUM
az SUM függvény összegzi a visszaadott értékeket, hasonló módon az AVG kiszámítja az átlagot.
nézzük meg, hogy ki tudjuk-e számítani a teljes rendelési összeget az OrderDetails-ből., A korábbi leckék tudjuk, hogyan kell kiszámítani a teljes összeg minden egyes részlet, mint:
SELECT SalesOrderID,
ProductID,
OrderQty* UnitPrice As ExtendedPrice
FROM Sales.SalesOrderDetail
Mivel lehet alkalmazni, összesített funkció kifejezések, felállíthatunk egy csoportosítást OrderID, hogy kiszámítja a teljes ár per sorrendben, mint
SELECT SalesOrderID, SUM(OrderQty * UnitPrice) AS TotalPriceFROM Sales.SalesOrderDetailGROUP BY SalesOrderID
Mi is a teljes, hogy a top parancs első
SELECT SalesOrderID,
SUM(OrderQty * UnitPrice) AS TotalPrice
FROM Sales.SalesOrderDetail
GROUP BY SalesOrderID
ORDER BY TotalPrice DESC
A hasonló módon ki tudjuk számítani, hogy az átlagos érdekében részletesen használja az AVG. Miért próbálja meg az alábbiakban! Ha elakad váltás a választ.
a kíváncsi számára, mivel az átlagot a minta számával osztva számítják ki, majd az AVG használata a fenti nyilatkozatban megegyezik:
SELECT SalesOrderID,
SUM(OrderQty * UnitPrice) / COUNT(SalesOrderID) AS AvgOrderAmount FROM Sales.SalesOrderDetail
GROUP BY SalesOrderID
ebben a szakaszban sokat fedeztünk Le., Itt van néhány alapvető dolgot kell megjegyezni:
- Egy összesített funkció lehet értékelni egy kifejezés, mint például ÖSSZEG(A + B)
- kellene alias összesített funkciók, így az oszlop nevek értelmes
- Ha dolgozik, összesített funkciót, illetve a CSOPORT ÁLTAL, néha könnyebb átgondolni a részleteket első, hogy ír egy egyszerű SELECT statement, ellenőrizze az eredményeket, majd adjuk hozzá a díszes. Azt fedezi ezt, hogyan kell írni jobb lekérdezések.
SQL COUNT
a COUNT funkció akkor használható, ha tudnia kell, hogy hány rekord létezik egy táblázatban vagy egy csoportban., A COUNT (*) minden rekordot megszámol a csoportosításban; míg a COUNT (expression) minden rekordot megszámol, ahol a kifejezés eredménye nem null. A különálló számokkal is használhatja az egyedi értékek számát egy csoporton belül.
ahhoz, hogy megtalálja az értékesítési Sorokatrendelésenként
SELECT SalesOrderID,
COUNT(SalesOrderDetailID)
FROM Sales.SalesOrderDetail
GROUP BY SalesOrderID
hogy megtalálja a termékenkénti egyedi értékesítési megrendelések számát
SELECT ProductID,
COUNT(DISTINCT SalesOrderID)
FROM Sales.SalesOrderDetail
GROUP BY ProductID
MIN és MAX
használja a MIN és MAX értéket, hogy megtalálja a legkisebb és legnagyobb értékeket egy táblázatban vagy csoportban.,
például a legkisebb és legnagyobb megrendelt termékmennyiségek megkereséséhez próbálja ki a
SELECT SalesOrderID,
Min(OrderQty) AS MinQuantity,
Max(OrderQty) AS MaxQuantity
FROM Sales.SalesOrderDetail
GROUP BY SalesOrderID
a számítás MIN vagy MAX értékét is megtalálhatja. Itt találjuk a terméken belül megrendelt legmagasabb termékmennyiséget:
SELECT SalesOrderID,
MAX(UnitPrice * OrderQty) as MaxAmount
FROM Sales.SalesOrderDetail GROUP BY SalesOrderID
birtoklás
az SQL birtoklás záradék a csoportok szűrésére szolgál az aggregált funkciók eredményei szerint. Ez lehetővé teszi olyan problémák megoldását, mint például az összes olyan megrendelés kiválasztása, amelyeknek több mint két rendelési részlete van.,
Ez a példa úgy néz ki, mint
SELECT SalesOrderID,
COUNT(SalesOrderDetailID)
FROM Sales.SalesOrderDetail
GROUP BY SalesOrderID
HAVING Count(SalesOrderDetailID) > 2
Ha minden 1000 dollárnál nagyobb megrendelést meg akarunk találni, akkor
SELECT SalesOrderID,
SUM(UnitPrice * OrderQty) AS TotalPrice
FROM Sales.SalesOrderDetail
GROUP BY SalesOrderID
HAVING SUM(UnitPrice * OrderQty) > 1000
ORDER BY TotalPrice DESC
megjegyezzük, hogy az Alias TotalPrice-t a klauzula szerinti sorrendben használhatjuk, de akkor a záradéknak a kifejezést kell használnia.
a Hammer home birtoklása érdekében szeretnék megmutatni egy utolsó példát. Itt látható, hogy a HAVING utasítás tartalmaz egy aggregált funkciót, amely nincs a SELECT listában.,
SELECT SalesOrderID,
SUM(UnitPrice * OrderQty) AS TotalPrice
FROM Sales.SalesOrderDetail
GROUP BY SalesOrderID
HAVING AVG(UnitPrice * OrderQty) > 500
ORDER BY TotalPrice DESC
a fenti lekérdezésben megkapjuk a megrendelések teljes árát, ahol az átlagos értékesítési összeg nagyobb, mint $500.00.
záró nyilatkozat arról, hogy
bár hasonló funkciót látnak el, kulcsfontosságú különbség van a WHERE záradék és a birtoklás között. A WHERE záradék Az egyes rekordok szűrésére; mivel a HAVING záradék szűri a csoportokat.
annak érdekében, hogy egyenesen a fejemben tartsam, szeretek arra gondolni, hogy hol végzi munkáját a csoportosítás előtt, majd a csoportok megalakulása után átvevő záradék.,
gyakorlatok
fontos gyakorolni! Használja a minta adatbázist ezekre a kérdésekre.
- HR jelentést akar az aktív alkalmazottak számáról munkaköri cím szerint. Milyen SQL-t használna?
- megjeleníti az egyes termékekhez rendelt Min, Max és átlagos mennyiséget a SalesOrderDetails alkalmazásban.
- sorolja fel az összes alkalmazotti beosztást, valamint az alkalmazottak számát, ahol a betegszabadság átlagos száma kevesebb vagy egyenlő negyven.
- a fenti #3-ban visszaküldött munkacím esetében a szám megegyezik a megfelelő munkacím válasz #1 eredményével?
A válaszok itt találhatók!,
Leave a Reply