v dnešní lekci se dozvíte o seskupování výsledků vrácených z vašich dotazů pomocí klauzule SQL GROUP by.
cíle dnešní lekce jsou:
- Učit se, jak se výsledky skupiny pomocí GROUP BY
- Použití agregačních funkcí provádět výpočty
- Pochopit, jak filtrovat skupiny pomocí klauzule HAVING
Důležité! Postupujte podle pokynů a proveďte příklady ve vaší databázi. Pokud jste tak ještě neučinili, zaregistrujte se pro mého průvodce, Jak začít s SQL Server., Získáte pokyny, jak nainstalovat bezplatné nástroje a ukázkovou databázi.
SQL GROUP by Clause
SQL GROUP by Clause se používá k výstupu řádku přes zadané hodnoty sloupců. Obvykle se používá ve spojení s agregovanými funkcemi, jako je součet nebo počet, aby shrnul hodnoty. Ve skupinách SQL jsou jedinečné kombinace polí. Spíše než vracet každý řádek v tabulce, když jsou hodnoty seskupeny, jsou vráceny pouze jedinečné kombinace.
skupina podle klauzule je přidána do příkazu SQL za klauzulí WHERE., Zde je příklad, kde uvádíme SalesOrderID, s výjimkou množství větších než 100.
Existuje několik věcí, na vědomí. Za prvé, sloupce, které chceme shrnout, jsou uvedeny, oddělené čárkami, ve skupině klauzulí. Za druhé, stejný seznam sloupců musí být uveden v příkazu select; jinak příkaz selže.,
při spuštění tohoto příkazu není vrácen každý filtrovaný řádek. Ve výsledku jsou zahrnuty pouze jedinečné kombinace Prodejníhorid. Toto prohlášení je velmi podobné
Ale je tu zásadní rozdíl., Zřetelný modifikátor se zastaví při výstupu jedinečné kombinace řádků, zatímco se skupinou podle příkazu můžeme vypočítat hodnoty založené na podkladových filtrovaných řádcích pro každou jedinečnou kombinaci.
jinými slovy, pomocí našeho příkladu, s GROUP BY, můžeme vypočítat číslo nebo OrderDetails na pořadí, jako následující:
COUNT je příklad agregační funkce, tyto jsou opravdu co dát příkaz GROUP BY jeho zvláštní hodnotu.
SQL Aggregate Functions
některé funkce, například SUM, se používají k provádění výpočtů na skupině řádků, které se nazývají agregované funkce. Ve většině případů tyto funkce fungují na skupině hodnot, které jsou definovány pomocí skupiny podle klauzule., Pokud neexistuje skupina podle klauzule, obecně se rozumí souhrnná funkce platí pro všechny filtrované výsledky.
Některé z nejčastějších agregační funkce patří:
AVG(výraz) | Výpočet průměrné vyjádření. |
COUNT(expression) | počítejte výskyty hodnot bez null vrácených výrazem. |
COUNT ( * ) | počítá všechny řádky v zadané tabulce., |
MIN(výraz) | najde minimální hodnotu výrazu. |
MAX(výraz) | najde maximální hodnotu výrazu. |
SUM(výraz) | Vypočítejte součet výrazu. |
tyto funkce lze použít samostatně ve spojení se skupinou podle klauzule. Samy o sobě fungují po celé tabulce; při použití se skupinou by se však jejich výpočty „resetují“ pokaždé, když se seskupení změní., Tímto způsobem působí jako mezisoučty.
jednoduchá agregační funkce
při použití agregační funkce můžete buď vypočítat výsledek na všech hodnotách nebo odlišných hodnotách. Například, spočítat všechny SalesOrderDetails záznamy bychom mohli použít výrazu:
SELECT COUNT(SalesOrderID)
FROM Sales.SalesOrderDetail
Tento výsledky v počtu 121317, že se vrátil.
pro počítání odlišných příkazů tvořících podrobnosti bychom použili následující:
SELECT COUNT(Distinct SalesOrderID)
FROM Sales.SalesOrderDetail
počet je nyní 31465.,
SQL GROUP BY a Agregační Funkce
agregovat prostředky, aby se celek z jednotlivých částí. Souhrnné funkce jsou funkce, které pracují na více než jednom řádku pro návrat výsledku.
AVG a SUM
součtová funkce sčítá vrácené hodnoty, podobným způsobem AVG vypočítá průměr.
uvidíme, jestli můžeme vypočítat celkovou částku objednávky z OrderDetails., Z předchozích lekcí víme, jak vypočítat celkovou částku za každou zprávu jako:
SELECT SalesOrderID,
ProductID,
OrderQty* UnitPrice As ExtendedPrice
FROM Sales.SalesOrderDetail
Protože můžeme aplikovat agregační funkci na vyjádření, můžeme nastavit seskupení na Kódobjednávky pro výpočet celkové ceny za objednávku jako
SELECT SalesOrderID, SUM(OrderQty * UnitPrice) AS TotalPriceFROM Sales.SalesOrderDetailGROUP BY SalesOrderID
dokonce můžeme třídit dle celkového počtu, aby se horní objednávky první
SELECT SalesOrderID,
SUM(OrderQty * UnitPrice) AS TotalPrice
FROM Sales.SalesOrderDetail
GROUP BY SalesOrderID
ORDER BY TotalPrice DESC
V podobným způsobem můžeme vypočítat průměrnou detailu objednávky pomocí AVG. Proč to zkusíte níže! Pokud uvíznete, přepněte odpověď.
Pro zvědavý, protože v průměru se vypočítá jako součet vzorku vydělena počtem vzorků na periodu, pak pomocí AVG ve výše uvedeném prohlášení je stejný jako:
SELECT SalesOrderID,
SUM(OrderQty * UnitPrice) / COUNT(SalesOrderID) AS AvgOrderAmount FROM Sales.SalesOrderDetail
GROUP BY SalesOrderID
Jsme se vztahuje mnoho v této sekci., Zde jsou některé klíčové body k zapamatování:
- agregační funkci může vyhodnotit výraz jako SOUČET(A + B)
- měli Byste alias agregační funkce, takže názvy sloupců jsou smysluplné
- Při práci s agregační funkce a GROUP BY, je to někdy je jednodušší myslet na detaily jako první, že je psaní jednoduchý SELECT, zkontrolujte výsledky, pak přidat v přepychové věci. Zabývám se tím, jak psát lepší dotazy.
SQL COUNT
funkce COUNT se používá, když potřebujete vědět, kolik záznamů existuje v tabulce nebo ve skupině., Počet (*) bude počítat každý záznam ve skupině; zatímco počet(výraz) počítá každý záznam, kde výsledek výrazu není null. Můžete také použít odlišný s počtem najít počet jedinečných hodnot ve skupině.
najít číslo Řádky SalesOrderDetail na pořadí
SELECT SalesOrderID,
COUNT(SalesOrderDetailID)
FROM Sales.SalesOrderDetail
GROUP BY SalesOrderID
Chcete-li zjistit počet unikátních prodejních objednávek na jeden produkt
SELECT ProductID,
COUNT(DISTINCT SalesOrderID)
FROM Sales.SalesOrderDetail
GROUP BY ProductID
MIN a MAX
Použití MIN a MAX, jak najít nejmenší a největší hodnoty, respektive, v rámci tabulky nebo skupiny.,
například, najít nejmenší a největší množství produktů objednal v rámci objednávky zkusit
SELECT SalesOrderID,
Min(OrderQty) AS MinQuantity,
Max(OrderQty) AS MaxQuantity
FROM Sales.SalesOrderDetail
GROUP BY SalesOrderID
můžete také nalézt MINIMÁLNÍ nebo MAXIMÁLNÍ hodnotu výpočtu. Zde najdeme nejvyšší produktu, objednané množství ve výrobku:
SELECT SalesOrderID,
MAX(UnitPrice * OrderQty) as MaxAmount
FROM Sales.SalesOrderDetail GROUP BY SalesOrderID
S Ustanovení
SQL HAVING klauzule slouží k filtrování skupin podle výsledků agregačních funkcí. To umožňuje řešit problémy, jako je výběr všech objednávek, které mají více než dva řádky podrobností objednávky.,
tento příklad vypadá jako
SELECT SalesOrderID,
COUNT(SalesOrderDetailID)
FROM Sales.SalesOrderDetail
GROUP BY SalesOrderID
HAVING Count(SalesOrderDetailID) > 2
Pokud bychom chtěli najít všechny objednávky vyšší než 1000 dolarů bychom napsat,
SELECT SalesOrderID,
SUM(UnitPrice * OrderQty) AS TotalPrice
FROM Sales.SalesOrderDetail
GROUP BY SalesOrderID
HAVING SUM(UnitPrice * OrderQty) > 1000
ORDER BY TotalPrice DESC
na Vědomí, že můžeme použít alias TotalPrice v klauzuli ORDER BY, ale pak má ustanovení, má se použít výraz.
Chcete-li hammer home mít, chci ukázat poslední příklad. Zde uvidíte, že příkaz mající obsahuje souhrnnou funkci, která není v seznamu vybrat.,
SELECT SalesOrderID,
SUM(UnitPrice * OrderQty) AS TotalPrice
FROM Sales.SalesOrderDetail
GROUP BY SalesOrderID
HAVING AVG(UnitPrice * OrderQty) > 500
ORDER BY TotalPrice DESC
ve výše uvedeném dotazu získáváme celkovou cenu za objednávky, kde je průměrná částka SalesOrderDetail vyšší než $ 500.00.
konečné prohlášení o tom, že
ačkoli vykonávají podobnou funkci, existuje klíčové rozlišení mezi klauzulí WHERE a mající. Klauzule WHERE pro filtrování jednotlivých záznamů; vzhledem k tomu, že klauzule mající filtruje skupiny.
Aby se to přímo v mé hlavě jsem rád, že klauzule where dělá svou práci, než jakékoli seskupení konat, a pak S doložka převzetí po skupiny jsou tvořeny.,
cvičení
je důležité cvičit! K zodpovězení těchto otázek použijte ukázkovou databázi.
- HR chce zprávu o počtu aktivních zaměstnanců podle pracovního titulu. Jaký SQL byste použili?
- zobrazit Min, Max a průměrné množství objednané pro každý produkt v SalesOrderDetails.
- uveďte všechny pracovní tituly zaměstnanců a počet zaměstnanců, kde je průměrný počet hodin pracovní neschopnosti menší nebo roven čtyřiceti.
- pro název úlohy vrácené v # 3 výše, je počet stejný pro odpovídající název úlohy odpověď # 1 výsledek?
odpovědi jsou zde!,
Leave a Reply