tänään on oppitunti, olet menossa oppia ryhmittelyn tulokset palautuneet kyselyt käyttäen SQL: n GROUP BY-lauseke.
tavoitteet päivän aiheena on:
- Opi, miten voit ryhmittää tulokset käyttämällä GROUP BY
- Käyttää koostefunktioita suorittaa laskutoimituksia
- Ymmärtää, miten suodattaa ryhmiä käyttäen OTTAA lauseke
Tärkeää! Seuratkaa ja tehkää esimerkit tietokannassanne. Jos et ole jo tehnyt niin, rekisteröidy oppaani aloittaa SQL Server., Saat ohjeet, miten asentaa ilmaisia työkaluja ja näyte tietokanta.
SQL-ryhmää lausekkeella
SQL-ryhmää Lausekkeittain käytetään rivin tulostamiseen määritettyjen sarakkeen arvojen läpi. Sitä käytetään tyypillisesti yhdessä aggregaattifunktioiden kuten summan tai laskennan kanssa arvojen tiivistämiseen. SQL-ryhmissä on ainutlaatuisia kenttäyhdistelmiä. Taulukon jokaisen rivin palauttamisen sijaan, kun arvot ryhmitellään, palautetaan vain ainutlaatuiset yhdistelmät.
ryhmä Lausekkeittain lisätään SQL-lausekkeeseen WHERE-lausekkeen jälkeen., Tässä on esimerkki, jossa listaamme SalesOrderID, lukuun ottamatta määriä yli 100.
On olemassa muutamia asioita huomata. Ensinnäkin sarakkeet, jotka haluamme tiivistää, on lueteltu pilkuilla, ryhmässä lausekkeella. Toiseksi tämä sama sarakeluettelo on lueteltava valitussa lausumassa; muuten lausuma epäonnistuu.,
kun tämä lausunto ajetaan, jokaista suodatettua riviä ei palauteta. Tulokseen sisältyy vain ainutkertaisia Salesorderidin yhdistelmiä. Tämä lausunto on hyvin samanlainen kuin
Mutta on keskeinen ero., DISTINCT-määritteen pysähtyy syöttöä ainutlaatuinen yhdistelmä riviä, kun taas RYHMÄN julkilausuman, voimme laskea arvoja, jotka perustuvat taustalla suodatetut rivit kunkin ainutlaatuinen yhdistelmä.
Toisin sanoen, käyttämällä esimerkiksi RYHMÄN, voimme laskea numero tai OrderDetails per tilaus seuraavasti:
COUNT on esimerkki aggregate function, nämä ovat mitä todella antaa RYHMÄN lausunnon, sen erityinen arvo.
SQL-koostefunktioita
Jotkin funktiot, kuten SUMMA, käytetään suorittamaan laskutoimituksia ryhmä rivit, nämä ovat nimeltään koostefunktioita. Useimmissa tapauksissa nämä funktiot toimivat arvoryhmällä, joka määritellään käyttämällä ryhmää lausekkeittain., Kun ryhmää ei ole lausekkeittain, on yleisesti selvää, että aggregaattifunktio koskee kaikkia suodatettuja tuloksia.
Joitakin yleisimpiä yhteenlaskettu toimintoja ovat:
AVG(lauseke) | Laske keskimääräinen ilmaisun. |
COUNT(lauseke) | Count esiintymiä ei-null-arvon, palautetaan ilme. |
COUNT(*) | Laskee kaikki rivit määritettyyn taulukkoon., |
MIN(lauseke) | Löytää pienin lausekkeen arvo. |
MAX(lauseke) | Löytää suurin lausekkeen arvo. |
SUMMA(lauseke) | Laske summa ilme. |
Näitä toimintoja voidaan käyttää yksinään, yhdessä GROUP BY-lauseke. Omasta, ne toimivat koko taulukko; kuitenkin, kun käytetään RYHMÄN, niiden laskelmat ovat ”reset” joka kerta ryhmittely muutoksia., Näin ne toimivat välisummina.
yksinkertainen Aggregaattifunktio
aggregaattifunktiota käytettäessä tuloksen voi joko laskea kaikille arvoille tai erillisille arvoille. Esimerkiksi, laskea kaikki SalesOrderDetails kirjaa voisimme käyttää ilmaisua:
SELECT COUNT(SalesOrderID)
FROM Sales.SalesOrderDetail
Tämä johtaa lasken 121317 palautetaan.
laskea erilliset tilaukset muodostavat yksityiskohtia meidän olisi käytettävä seuraavia:
SELECT COUNT(Distinct SalesOrderID)
FROM Sales.SalesOrderDetail
laske nyt on 31465.,
SQL: n GROUP BY-ja koostefunktioita
kootusti keinoja tehdä koko yksittäisten osien. Aggregaattifunktiot ovat funktioita, jotka toimivat useammalla kuin yhdellä rivillä palauttaakseen tuloksen.
AVG ja SUMMA
SUMMA-funktio yhteensä jopa arvot palautetaan samalla tavalla AVG laskee keskiarvon.
katsotaan, saammeko laskettua tilausten kokonaismäärän Tilauskynnistä., Aiemmista oppitunteja tiedämme, miten laskea kokonaismäärä kunkin yksityiskohtaisesti, kuten:
SELECT SalesOrderID,
ProductID,
OrderQty* UnitPrice As ExtendedPrice
FROM Sales.SalesOrderDetail
Koska voimme soveltaa yhteenlaskettu toiminto ilmaisuja, voimme perustaa ryhmittely on Tilauksentunnus laskea kokonaishinta per tilaus, koska
SELECT SalesOrderID, SUM(OrderQty * UnitPrice) AS TotalPriceFROM Sales.SalesOrderDetailGROUP BY SalesOrderID
– Voimme jopa lajitella yhteensä saada alkuun tilaukset ensimmäinen
SELECT SalesOrderID,
SUM(OrderQty * UnitPrice) AS TotalPrice
FROM Sales.SalesOrderDetail
GROUP BY SalesOrderID
ORDER BY TotalPrice DESC
samalla tavalla voimme laskea keskimääräisen tilauksen yksityiskohtaisesti käyttämällä AVG. Miksi kokeilet sitä alla! Jos jäät jumiin, vaihda vastaus.
utelias, koska keskimäärin on laskettu summana näyte jaettuna näytteen määrä, sitten käyttämällä AVG edellä julkilausuman on sama kuin:
SELECT SalesOrderID,
SUM(OrderQty * UnitPrice) / COUNT(SalesOrderID) AS AvgOrderAmount FROM Sales.SalesOrderDetail
GROUP BY SalesOrderID
– kävimme läpi paljon tässä jaksossa., Tässä muutamia keskeisiä kohtia muistaa:
- yhteenlaskettu toiminto voi arvioida ilmaus, kuten SUMMA(A + B)
- Sinun pitäisi alias koostefunktioita, joten sarakkeiden nimet ovat mielekkäitä
- Kun työskentelee koostefunktioita ja RYHMÄN, se on joskus on helpompi miettiä yksityiskohtia ensimmäinen, joka kirjoittaa yksinkertainen SELECT, tarkista tulokset, sitten lisätä hienoja juttuja. Minä kattaa tämän Miten kirjoittaa parempia kyselyitä.
SQL COUNT
laskutoimintoa käytetään, kun pitää tietää, kuinka monta levyä on taulukossa tai ryhmässä., COUNT (*) laskee kaikki tietueet ryhmittelyssä; kun taas COUNT(expression) laskee jokaisen tietueen, jossa ilmaisun tulos ei ole mitätön. Voit myös käyttää erillistä kanssa COUNT löytää useita ainutlaatuisia arvoja ryhmän sisällä.
löytää määrä SalesOrderDetail Riviä, jotta
SELECT SalesOrderID,
COUNT(SalesOrderDetailID)
FROM Sales.SalesOrderDetail
GROUP BY SalesOrderID
löytää useita ainutlaatuisia myynti tilauksia per tuote
SELECT ProductID,
COUNT(DISTINCT SalesOrderID)
FROM Sales.SalesOrderDetail
GROUP BY ProductID
MIN ja MAX
Käytä MIN-ja MAX löytää pienin-ja suurin-arvot, vastaavasti, taulukon tai ryhmä.,
jos esimerkiksi haluat löytää pienin ja suurin tuote määrät määräsi sisällä, jotta voidaan kokeilla,
SELECT SalesOrderID,
Min(OrderQty) AS MinQuantity,
Max(OrderQty) AS MaxQuantity
FROM Sales.SalesOrderDetail
GROUP BY SalesOrderID
Voit myös etsiä MIN-tai MAX-arvo laskelma. Täällä löydämme korkein tuote, määrä tilasi sisällä tuote:
SELECT SalesOrderID,
MAX(UnitPrice * OrderQty) as MaxAmount
FROM Sales.SalesOrderDetail GROUP BY SalesOrderID
OTTAA Lauseke
SQL OTTAA lauseke, käytetään suodattaa ryhmien tulosten mukaan yhteenlaskettu toimintoja. Tämä mahdollistaa ratkaista ongelmia, kuten valita kaikki tilaukset, joilla on enemmän kuin kaksi tilaa yksityiskohtaisesti linjat.,
tämä esimerkki näyttää,
SELECT SalesOrderID,
COUNT(SalesOrderDetailID)
FROM Sales.SalesOrderDetail
GROUP BY SalesOrderID
HAVING Count(SalesOrderDetailID) > 2
Jos halusimme löytää kaikki tilaukset yli $1000, me kirjoittaa
SELECT SalesOrderID,
SUM(UnitPrice * OrderQty) AS TotalPrice
FROM Sales.SalesOrderDetail
GROUP BY SalesOrderID
HAVING SUM(UnitPrice * OrderQty) > 1000
ORDER BY TotalPrice DESC
Huomaa, että voimme käyttää alias TotalPrice ORDER BY-lausekkeen, mutta sitten ottaa lauseke, on käytettävä ilmaisua.
to hammer home HAVING, I want to show one last example. Tässä näet ottaa lausunto sisältää aggregaatti funktio, joka ei ole Valitse lista.,
SELECT SalesOrderID,
SUM(UnitPrice * OrderQty) AS TotalPrice
FROM Sales.SalesOrderDetail
GROUP BY SalesOrderID
HAVING AVG(UnitPrice * OrderQty) > 500
ORDER BY TotalPrice DESC
edellä kyselyn saamme kokonaishinta tilauksia, joissa keskimääräinen SalesOrderDetail määrä on suurempi kuin 500,00 dollaria.
Lopullinen Lausunto siitä,
Vaikka ne suorittavat saman tehtävän, on keskeinen ero, JOSSA lauseke ja OTTAA. WHERE-lauseke yksittäisten tietueiden suodattamiseksi; kun taas HAVING-lauseke suodattaa ryhmät.
pitää se suoraan pääni haluaisin ajatella, että JOS lauseke ei voi tehdä työtään, ennen kuin mitään ryhmittymiä tapahtua, ja sitten OTTAA lauseke ottaen yli, kun ryhmiä muodostetaan.,
harjoitukset
on tärkeää harjoitella! Näihin kysymyksiin vastataan otantatietokannan avulla.
- HR haluaa selvityksen aktiivisten työntekijöiden määrästä työnimikkeittäin. Mitä SQL: ää käyttäisit?
- Näytä min, Max, ja keskimääräinen määrä tilattu kunkin tuotteen myyntipisteissä.
- listaa kaikki työntekijöiden työnimikkeet ja niiden työntekijöiden määrän, joiden keskimääräinen sairauslomatuntimäärä on alle tai yhtä suuri kuin neljäkymmentä.
- työn nimi palautetaan #3 edellä, on laskea sama vastaava työnimike vastaus #1: n tulos?
vastaukset ovat täällä!,
Leave a Reply