sql >> Databáze >  >> RDS >> Oracle

Agregace dat pomocí skupinových funkcí (skupina po orákulu)

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ů.


  1. Android :Chyba Sqlite - (1) blízko null:chyba syntaxe

  2. Jak používat tabulky Oracle PLSQL (asociativní pole nebo index podle tabulky)

  3. SQL Server Xml dotaz s více obory názvů

  4. Zničení Postgres DB na Heroku