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


Ako nainštalovať DAX Studio & Tabular Editor v LuckyTemplates

Ako nainštalovať DAX Studio & Tabular Editor v LuckyTemplates

Zistite, ako stiahnuť a nainštalovať DAX Studio a Tabular Editor 3 a ako ich nakonfigurovať na použitie v LuckyTemplates a v Exceli.

LuckyTemplates Vizualizácia tvarovej mapy pre priestorovú analýzu

LuckyTemplates Vizualizácia tvarovej mapy pre priestorovú analýzu

Tento blog obsahuje vizualizáciu Shape Map pre priestorovú analýzu v LuckyTemplates. Ukážem vám, ako môžete efektívne využiť túto vizualizáciu s jej funkciami a prvkami.

LuckyTemplates Finančné výkazníctvo: Prideľovanie výsledkov šablónam v každom jednom riadku

LuckyTemplates Finančné výkazníctvo: Prideľovanie výsledkov šablónam v každom jednom riadku

V tomto návode predstavujem jedinečný nápad týkajúci sa finančného výkazníctva, ktorý spočíva v prideľovaní výsledkov na vopred určené šablóny tabuliek v rámci LuckyTemplates.

DAX měří v LuckyTemplates pomocí Measure Branching

DAX měří v LuckyTemplates pomocí Measure Branching

Vytvářejte míry DAX v LuckyTemplates pomocí existujících mír nebo vzorců. Tomu říkám technika větvení opatření.

Najvýkonnejšie volanie funkcie v LuckyTemplates

Najvýkonnejšie volanie funkcie v LuckyTemplates

V tomto blogu preskúmajte množinu údajov LuckyTemplates, najvýkonnejšie volanie funkcií, ktoré vám prináša tisíce funkcií M a DAX na dosah ruky.

Techniky modelovania údajov na organizáciu opatrení DAX

Techniky modelovania údajov na organizáciu opatrení DAX

V dnešnom návode sa podelím o niekoľko techník modelovania údajov o tom, ako lepšie usporiadať vaše merania DAX pre efektívnejší pracovný tok.

LuckyTemplates Financial Dashboard: Kompletné tipy na prispôsobenie tabuľky

LuckyTemplates Financial Dashboard: Kompletné tipy na prispôsobenie tabuľky

LuckyTemplates je skvelý nástroj pre finančné výkazníctvo. Tu je návod, ako vytvoriť prispôsobené tabuľky pre váš finančný dashboard LuckyTemplates.

Osvedčené postupy toku jazyka Power Query

Osvedčené postupy toku jazyka Power Query

V tomto návode sa bude diskutovať o toku jazyka Power Query a o tom, ako môže pomôcť vytvoriť hladkú a efektívnu zostavu údajov.

LuckyTemplates vlastní ikony | Vizualizační technika PBI

LuckyTemplates vlastní ikony | Vizualizační technika PBI

Budu diskutovat o jedné z mých oblíbených technik kolem vlastních ikon LuckyTemplates, která používá vlastní ikony dynamickým způsobem ve vizuálech LuckyTemplates.

Vytváření tabulek LuckyTemplates pomocí funkce UNION & ROW

Vytváření tabulek LuckyTemplates pomocí funkce UNION & ROW

V tomto blogu vám ukážu, jak můžete vytvořit tabulky LuckyTemplates pomocí vzorce, který kombinuje funkci UNION a funkci ROW.