SKUPINOVÉ SADY v PostgreSQL

author
3 minutes, 20 seconds Read

Souhrn: V tomto kurzu se seznámíte s konceptem skupinových sad a s tím, jak pomocí klauzule PostgreSQL GROUPING SETS vytvořit v dotazu více skupinových sad.

Nastavení ukázkové tabulky

Začneme tím, že pro ukázku vytvoříme novou tabulku s názvemsales.

Code language: SQL (Structured Query Language) (sql)

Tabulka sales uchovává počet prodaných výrobků podle značky a segmentu.

Úvod do PostgreSQL SKUPINOVÉ SADY

Skupinová sada je množina sloupců, podle kterých se seskupuje pomocí klauzule GROUP BY.

Skupinová sada je označena čárkou odděleným seznamem sloupců umístěným v závorkách:

Například následující dotaz používá klauzuli GROUP BY pro vrácení počtu prodaných výrobků podle značky a segmentu. Jinými slovy definuje seskupovací množinu značky a segmentu, která je označena (brand, segement)

Code language: SQL (Structured Query Language) (sql)

Následující dotaz zjistí počet výrobků prodaných podle značky. Definuje seskupovací množinu (brand):

Code language: SQL (Structured Query Language) (sql)

Následující dotaz zjistí počet prodaných výrobků podle segmentu. Definuje seskupovací množinu (segment):

Code language: SQL (Structured Query Language) (sql)

Následující dotaz zjistí počet prodaných výrobků pro všechny značky a segmenty. Definuje prázdnou seskupovací množinu, která je označena ().

Code language: SQL (Structured Query Language) (sql)

Předpokládejte, že chcete všechny seskupovací množiny pomocí jediného dotazu. Abyste toho dosáhli, můžete použít UNION ALL ke spojení všech výše uvedených dotazů.

Protože UNION ALL vyžaduje, aby všechny výsledkové množiny měly stejný počet sloupců s kompatibilními datovými typy, musíte dotazy upravit přidáním NULL do výběrového seznamu každého z nich, jak je uvedeno níže:

Code language: SQL (Structured Query Language) (sql)

Tento dotaz vygeneroval jedinou výsledkovou množinu s agregáty pro všechny seskupovací množiny.

Přestože výše uvedený dotaz funguje podle očekávání, má dva hlavní problémy:

  • Poprvé je poměrně dlouhý
  • Druhé má problém s výkonem, protože PostgreSQL musí pro každý dotaz prohledávat tabulku sales zvlášť.

Pro zefektivnění poskytuje PostgreSQL klauzuli GROUPING SETS, která je podkapitolou klauzule GROUP BY.

Klauzule GROUPING SETS umožňuje definovat více seskupovacích sad v jednom dotazu.

Obecná syntaxe klauzule GROUPING SETS je následující:

Code language: SQL (Structured Query Language) (sql)

V této syntaxi máme čtyři seskupovací množiny (c1,c2), (c1), (c2) a ().

Pro použití této syntaxe ve výše uvedeném příkladu můžete místo klauzule UNION ALL použít klauzuli GROUPING SETS takto:

Code language: SQL (Structured Query Language) (sql)

Tento dotaz je mnohem kratší a čitelnější. Navíc PostgreSQL optimalizuje počet skenování tabulky sales a nebude ji skenovat vícekrát.

Funkce seskupení

Funkce GROUPING() přijímá argument, kterým může být název sloupce nebo výraz:

Funkce column_name nebo expression se musí shodovat s tou, která je uvedena v klauzuli GROUP BY.

Funkce GROUPING() vrací bit 0, pokud je argument členem aktuální množiny seskupení, a 1 v opačném případě.

Podívejte se na následující příklad:

Code language: SQL (Structured Query Language) (sql)

Jak ukazuje obrázek, když je hodnota v grouping_brand 0, sloupec sum ukazuje mezisoučet brand.

Když je hodnota v grouping_segment nula, sloupec součet ukazuje mezisoučet segment.

Pro zjištění mezisoučtu jednotlivých značek můžete použít funkci GROUPING() v klauzuli HAVING takto:

V tomto návodu jste se naučili používat funkci PostgreSQL GROUPING SETS k vytvoření více seskupovacích sad.

  • Byl tento návod užitečný?
  • AnoNe

.

Similar Posts

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.