Jako součást výukového programu Oracle SQL je zde dobré podrobnosti o skupině podle oracle
Skupinové funkce na rozdíl od funkcí s jednou hodnotou fungují na sadě řádků a vracejí jeden řádek na skupinu. Sada řádků může být celá tabulka nebo tabulka rozdělená do skupin
Typy skupinových funkcí v Oracle zahrnují:
AVG([Odlišné/vše] n) | Pouze číselné datové typy. Průměrná hodnota sloupce n ignorující hodnoty null |
POČET({*/[Distinct/all]expr}) | Je to pouze skupinová funkce, která obsahuje hodnoty null. Počítá počet řádků v příkazu select, který splňuje klauzuli where. Count(*) zahrnuje všechny hodnoty null a duplicitní hodnoty |
MAX([Odlišné/vše] výraz) | Lze jej použít s jakýmkoli datovým typem. Poskytuje maximální hodnotu výrazu ignorující hodnoty null |
MIN([Odlišné/vše] výraz) | Lze použít s jakýmkoli datovým typem. . Poskytuje minimální hodnotu výrazu ignorující hodnoty null |
STDDEV([Odlišné/vše] n) | Pouze číselné datové typy. Poskytuje standardní odchylku n ignorující hodnoty null |
SOUČET ([Odlišné/vše] n) | Pouze číselné datové typy a nemohou mít ve funkci jiné aritmetické operátory. Poskytuje součet n ignoruje hodnoty null |
VARIANCE([Odlišné/vše] n) | Pouze číselné datové typy. Poskytuje rozptyl n ignorující hodnoty null |
Syntaxe:
SELECT col1, col2, … col_n, aggregate_function (aggregate_expression) FROM tables [WHERE conditions] GROUP BY col1, col2, … col_n Having group condition;
Server Oracle provedl následující kroky
- Nejprve se vyberou řádky na základě klauzule where
- Řádky jsou seskupeny
- Funkce skupiny se použije na každou skupinu
- Zobrazí se skupina, která odpovídá kritériu v klauzuli have
Nejprve je tedy vyhodnocena klauzule WHERE (omezuje výsledky dotazu), poté klauzule GROUP BY (seskupuje výsledky klauzule WHERE), poté klauzule HAVING (dále omezuje výsledky omezením vrácených skupin).
Některé důležité body o seskupení podle orákula
(1) GROUP BY:Rozdělí výsledky skupinových funkcí z jedné velké tabulky dat do menších logických seskupení.
(2) Klauzule WHERE nemůže omezit skupinu, proto použijte klauzuli HAVING.
(3) Nepoužívejte alias sloupce v klauzuli GROUP BY.
(4) HAVING:omezuje zobrazení skupin na ty, které „mají“ specifikované podmínky.
(5) Funkce NVL umožňuje funkci GROUP BY zahrnout do výpočtu nulové hodnoty.
(6) Jakýkoli sloupec nebo výraz ve výběrovém seznamu, který není agregační funkcí, musí být ve skupině podle klauzule
Příklady skupinových funkcí v Oracle
Nejprve vytvoříme ukázkové tabulky a poté vyzkoušíme skupinu podle Oracle SQL
CREATE TABLE "DEPT" ( "DEPTNO" NUMBER(2,0), "DNAME" VARCHAR2(14), "LOC" VARCHAR2(13), CONSTRAINT "PK_DEPT" PRIMARY KEY ("DEPTNO") ) CREATE TABLE "EMP" ( "EMPNO" NUMBER(4,0), "ENAME" VARCHAR2(10), "JOB" VARCHAR2(9), "MGR" NUMBER(4,0), "HIREDATE" DATE, "SAL" NUMBER(7,2), "COMM" NUMBER(7,2), "DEPTNO" NUMBER(2,0), CONSTRAINT "PK_EMP" PRIMARY KEY ("EMPNO"), CONSTRAINT "FK_DEPTNO" FOREIGN KEY ("DEPTNO") REFERENCES "DEPT" ("DEPTNO") ENABLE ); insert into DEPT values(10, 'ACCOUNTING', 'NEW YORK'); insert into dept values(20, 'RESEARCH', 'DALLAS'); insert into dept values(30, 'RESEARCH', 'DELHI'); insert into dept values(40, 'RESEARCH', 'MUMBAI'); insert into emp values( 7698, 'Blake', 'MANAGER', 7839, to_date('1-5-2007','dd-mm-yyyy'), 2850, null, 10 ); insert into emp values( 7782, 'Clark', 'MANAGER', 7839, to_date('9-6-2008','dd-mm-yyyy'), 2450, null, 10 ); insert into emp values( 7788, 'Scott', 'ANALYST', 7566, to_date('9-6-2012','dd-mm-yyyy'), 3000, null, 20 ); insert into emp values( 7789, 'TPM', 'ANALYST', 7566, to_date('9-6-2017','dd-mm-yyyy'), 3000, null, null ); insert into emp values( 7560, 'T1OM', 'ANALYST', 7567, to_date('9-7-2017','dd-mm-yyyy'), 4000, null, 20 ); insert into emp values( 7790, 'TOM', 'ANALYST', 7567, to_date('9-7-2017','dd-mm-yyyy'), 4000, null, null ); commit; Select * from emp;
Jeden sloupec
Select dept , avg(sal) from emp group by dept;
Více sloupců
Select deptno ,job, sum(sal) from emp group by deptno,job
Funkce počítání
SELECT dept, COUNT(*) AS "Np of employees" FROM emp WHERE sal < 15000
GROUP BY dept;
Minimální funkce
SELECT dept, MIN(sal) AS "Lowest salary" FROM emp
GROUP BY dept;
Doufám, že se vám tento článek líbí
Související články
Analytické funkce v oracle:Funkce Oracle Analytic počítají agregovanou hodnotu na základě skupiny řádků pomocí klauzule přes rozdělení podle klauzule oracle, liší se od agregačních funkcí
rank v oracle:RANK, DENSE_RANK a ROW_NUMBER jsou analytické oracle funkce, které se používají k řazení řádků ve skupině řádků nazvané window
Funkce vedení v oracle :Podívejte se na funkci LAG v Oracle &Lead function v Oracle, jak je používat v analytických dotazech a jak to funguje v Oracle sql
Nejčastější dotazy v Oracle :Na této stránce se dozvíte, jak prozkoumat různé způsoby, jak dosáhnout nejlepších N dotazů v Oracle a stránkování v databázi Oracle dotazů.