Klauzule HAVING v agregačních funkcích SQL

V tomto tutoriálu probereme několik způsobů, jak můžeme použít nebo spustit klauzuli HAVING v agregačních funkcích SQL . Použití této klauzule v agregačních funkcích SQL může výrazně pomoci při sumarizaci dat.

Klauzule HAVING je téměř podobná příkazu WHERE a lze ji také provést společně s ním.

Během tohoto výukového programu probereme jejich korelace a rozdíly poskytnutím příkladů.

Obsah

Příkazy GROUP BY And WHERE v SQL

V našem prvním příkladu budeme diskutovat o tom, jak spustit a používat ukázkovou tabulku níže. Upozorňujeme, že klauzuli WHERE můžeme použít pouze s existujícími sloupci a nikoli pouze v agregačních funkcích.

Klauzule HAVING v agregačních funkcích SQL

Řekněme, že chceme získat celkový prodej produktu na základě jeho sloupce SaleAmount , kde je hodnota větší než 2 . Abychom získali výsledek, náš příkaz by měl být následující:

Klauzule HAVING v agregačních funkcích SQL

Nejprve vybereme ProductName a agregujeme SaleAmount , abychom získali TotalSales. 

Klauzule HAVING v agregačních funkcích SQL

Poté jsme zde použili příkaz WHERE , protože se snažíme získat pouze produkty, u kterých je SaleAmount větší než 2. Příkaz 'GROUP BY ProductName' znamená, že seskupí řádky ve sloupci ProductName do jednoho.

Po provedení naší sady příkazů uvidíme, že ze všech dat ve sloupcích ProductName a SaleAmount byly zobrazeny pouze Bulb a Fan . To proto, že byli jediní, kteří měli SaleAmount větší než 2.

Klauzule HAVING v agregačních funkcích SQL

V tomto příkladu je příkaz WHERE pro filtrování výsledků pomocí existujícího sloupce, což je naše SaleAmount . Všimněte si také, že příkaz WHERE se zobrazuje před GROUP BY a nelze jej použít k filtrování agregačních funkcí. Na druhou stranu klauzule HAVING se objevuje za GROUP BY a používá se pro filtrování na základě agregační funkce. 

Klauzule GROUP BY And HAVING v SQL

V tomto příkladu si ukážeme rozdíl mezi příkazem WHERE a klauzulí HAVING . Použijeme stejný cíl jako v předchozím příkladu, abychom mohli porovnat a vyhodnotit výsledky. 

Nejprve si pomocí příkazu níže zobrazíme produkty s jejich celkovými tržbami. Jak vidíte, náš první příkaz je stále stejný jako náš první příkaz provádějící příkaz WHERE .

Klauzule HAVING v agregačních funkcích SQL

Pokud máme provést naše první dva příkazy, budeme mít následující výsledek:

Klauzule HAVING v agregačních funkcích SQL

Nyní řekněme, že chceme zobrazit pouze produkty, jejichž celkový prodej je vyšší než 5. Nemůžeme použít příkaz WHERE  , protože jej lze použít pouze s existujícími sloupci. Proto musíme použít klauzuli HAVING , protože budeme filtrovat z agregační funkce. 

Klauzule HAVING v agregačních funkcích SQL

Všimněte si, jak používáme klauzuli HAVING po GROUP BY na rozdíl od příkazu WHERE použitého před GROUP BY. Je to proto, že SQL seskupí záznamy před vyhodnocením klauzule HAVING

Proveďme pak tyto příkazy spolu s HAVING SUM(SaleAmount)>5 . Po zadání, že chceme získat pouze ty produkty, jejichž celková cena je větší než 5, si všimneme, že v naší aktuální tabulce výsledků už pero neuvidíme . To proto, že jeho součet je menší než 5

Klauzule HAVING v agregačních funkcích SQL

Stručně řečeno, když chceme filtrovat data z naší tabulky na základě existujícího sloupce, použijeme klauzuli WHERE , zatímco když chceme filtrovat data z agregační funkce, použijeme klauzuli HAVING

Klauzule HAVING And WHERE v SQL Server Management Studio (SSMS)

Nyní pokročíme kupředu tím, že probereme a předvedeme, jak můžeme provést klauzuli HAVING v (SSMS). Poskytnutím příkladů se také vypořádáme s rozdílem mezi klauzulí HAVING a klauzulí WHERE .

Níže jsou ukázková data SalesOrderHeader. Tato data se skládají ze 100 řádků. V našem příkladu chceme získat TotalSale podle CustomerID , kde je TotalSale větší než 10000 . Všimněte si, že celkový prodej vychází ze součtu hodnot sloupce TotalDue .

Klauzule HAVING v agregačních funkcích SQL

Nejprve mi dovolte demonstrovat, proč nemůžeme použít klauzuli WHERE , když chceme filtrovat na agregační funkci na základě našeho příkladu výše. 

Použijeme ukázkovou sadu příkazů z obrázku níže. Jak můžete vidět, technicky máme stejnou sadu příkazů jako ta, kterou máme z našeho úplně prvního příkladu.

Když však klikneme na Provést v levém horním rohu, dojde k chybě, protože při filtrování agregační funkce nemůžeme použít samotnou klauzuli WHERE .

Klauzule HAVING v agregačních funkcích SQL

Abychom chybu opravili, musíme výsledek filtrovat pomocí klauzule HAVING namísto klauzule WHERE . Naše nová sada příkazů by měla být podobná obrázku níže.

Klauzule HAVING v agregačních funkcích SQL

Nyní vidíme, že naše chyba byla opravena a obsahuje výsledky zas celkovým prodejem vyšším než 10 000 .

Opět platí, že klauzule WHERE se vždy používá před klauzulí GROUP BY , zatímco klauzule HAVING se vždy používá po klauzuli GROUP BY .

Použití klauzule HAVING a klauzule WHERE v SQL  

Pro tento příklad řekněme, že chceme současně použít klauzuli WHERE a HAVING . Zkusme získat TotalSale by CustomerID , kde TotalSale je větší než 10000 , ale pouze u zákazníků, jejichž TerritoryID je rovno 1

Protože chceme filtrovat výsledky se zákazníky, kteří mají 1 jako své TerritoryID , použijeme klauzuli WHERE. Náš příkaz by tedy měl být stejný jako ten předchozí. Opět jsme přidali klauzuli WHERE před klauzuli GROUP BY.

Klauzule HAVING v agregačních funkcích SQL

Prozatím nevidíme velký rozdíl mezi naším předchozím výsledkem a tímto novým. Pokud se však pozorně podíváte na pravý dolní roh, máme nyní pouze 64 řádků ve srovnání s předchozím s 505 řádky dat. Je to proto, že výsledky jsou filtrovány také na základě jejich TerritoryID .

Závěr

Abychom to shrnuli, klauzuli WHERE můžeme použít pouze s existujícími sloupci. Pokud potřebujeme filtrovat pomocí agregovaných funkcí, musíme místo toho použít klauzuli HAVING .

Použití klauzule HAVING v agregačních funkcích SQL a procvičování způsobů společného provádění klauzule HAVING a klauzule WHERE může uživatelům poskytnout pohodlí při práci s velkým množstvím dat nebo záznamů. 

Doufám, že jsem vám poskytl dostatek informací a porozumění ohledně použití klauzule HAVING v agregačních funkcích SQL. Chcete-li se o tomto tématu a dalším souvisejícím obsahu dozvědět více, určitě se můžete podívat na seznam relevantních odkazů níže.

Vše nejlepší,

Hafiz


Vytvoření tabulky data v LuckyTemplates

Vytvoření tabulky data v LuckyTemplates

Zjistěte, proč je důležité mít vyhrazenou tabulku s daty v LuckyTemplates, a naučte se nejrychlejší a nejefektivnější způsob, jak toho dosáhnout.

LuckyTemplates Mobile Reporting Tipy a techniky

LuckyTemplates Mobile Reporting Tipy a techniky

Tento stručný návod zdůrazňuje funkci mobilního hlášení LuckyTemplates. Ukážu vám, jak můžete efektivně vytvářet přehledy pro mobily.

Profesionální servisní analytické zprávy v LuckyTemplates

Profesionální servisní analytické zprávy v LuckyTemplates

V této ukázce LuckyTemplates si projdeme sestavy ukazující profesionální analýzy služeb od firmy, která má více smluv a zákaznických vztahů.

Aktualizácie Microsoft Power Platform | Microsoft Ignite 2021

Aktualizácie Microsoft Power Platform | Microsoft Ignite 2021

Pozrite si kľúčové aktualizácie pre Power Apps a Power Automate a ich výhody a dôsledky pre platformu Microsoft Power Platform.

Bežné funkcie SQL: Prehľad

Bežné funkcie SQL: Prehľad

Objavte niektoré bežné funkcie SQL, ktoré môžeme použiť, ako napríklad reťazec, dátum a niektoré pokročilé funkcie na spracovanie alebo manipuláciu s údajmi.

Vytvoření šablony LuckyTemplates: Průvodce a tipy

Vytvoření šablony LuckyTemplates: Průvodce a tipy

V tomto tutoriálu se naučíte, jak vytvořit dokonalou šablonu LuckyTemplates, která je nakonfigurována podle vašich potřeb a preferencí.

Parametry pole a malé násobky v LuckyTemplates

Parametry pole a malé násobky v LuckyTemplates

V tomto blogu si ukážeme, jak vrstvit parametry pole s malými násobky, abychom vytvořili neuvěřitelně užitečné přehledy a vizuály.

LuckyTemplates Rank a vlastní seskupení

LuckyTemplates Rank a vlastní seskupení

V tomto blogu se dozvíte, jak používat funkce hodnocení LuckyTemplates a vlastní seskupování k segmentaci ukázkových dat a jejich seřazení podle kritérií.

Zobrazení kumulativního součtu pouze do určitého data v LuckyTemplates

Zobrazení kumulativního součtu pouze do určitého data v LuckyTemplates

V tomto tutoriálu se budu zabývat konkrétní technikou, jak zobrazit kumulativní součet pouze do určitého data ve vašich vizuálech v LuckyTemplates.

Bullet Charts: Pokročilé vlastní vizuální prvky pro LuckyTemplates

Bullet Charts: Pokročilé vlastní vizuální prvky pro LuckyTemplates

Naučte se vytvářet a přizpůsobovat Bullet grafy v LuckyTemplates, které se používají hlavně pro měření výkonu oproti cílovým nebo předchozím rokům.