Oracle
 sql >> Database >  >> RDS >> Oracle

Aggregazione dei dati utilizzando le funzioni di gruppo (raggruppamento per oracle)

Come parte dell'apprendimento del tutorial Oracle SQL, ecco un buon dettaglio sul gruppo per oracolo

Le funzioni di gruppo, a differenza delle funzioni a valore singolo, operano sull'insieme di righe e restituiscono una riga per gruppo. L'insieme di righe può essere un'intera tabella o la tabella divisa in gruppi

I tipi di funzioni di gruppo in Oracle includono:

AVG([Distinti/tutti] n) Solo tipi di dati numerici. Il valore medio della colonna n che ignora i valori null
COUNT({*/[Distinct/all]expr}) È solo una funzione di gruppo che include valori nulli. Conta il numero di righe nell'istruzione select che soddisfa la clausola where. Count(*) include tutti i valori nulli e duplicati
MAX([Distinti/tutti] espr) Può essere utilizzato con qualsiasi tipo di dati. Fornisce il valore massimo di expr ignorando i valori null
MIN([Distinta/tutti] espr) Può essere utilizzato con qualsiasi tipo di dati. . Fornisce un valore minimo di expr ignorando i valori null
STDDEV([Distinta/tutti] n) Solo tipi di dati numerici. Fornisce una deviazione standard di n ignorando i valori null
SOMMA ([Distinta/tutti] n) Solo tipi di dati numerici e non può avere altri operatori aritmetici in function.it fornisce la somma di n ignorando i valori null
VARIANZA([Distinta/tutto] n) Solo tipi di dati numerici. Fornisce la varianza di n ignorando i valori null

Sintassi:

SELECT col1, col2, … col_n,
aggregate_function (aggregate_expression)
FROM tables
[WHERE conditions]
GROUP BY col1, col2, … col_n
Having group condition;

Il server Oracle ha eseguito i seguenti passaggi

  • Prima vengono selezionate le righe in base alla clausola where
  • Le righe sono raggruppate
  • La funzione di gruppo viene applicata a ciascun gruppo
  • Viene visualizzato il gruppo che corrisponde al criterio nella clausola having

Quindi viene valutata prima la clausola WHERE (limita i risultati della query), quindi la clausola GROUP BY (raggruppa i risultati di WHERE), quindi la clausola HAVING (limita ulteriormente i risultati, limitando i gruppi restituiti).

Alcuni punti importanti sul gruppo per oracolo

(1) GROUP BY:scompone i risultati delle funzioni di gruppo da una grande tabella di dati in raggruppamenti logici più piccoli.

(2) La clausola WHERE non può limitare un gruppo, quindi usa la clausola HAVING.

(3) Non utilizzare l'alias di colonna nella clausola GROUP BY.

(4) HAVING:limita la visualizzazione dei gruppi a quelli che “hanno” le condizioni specificate.

(5) La funzione NVL consente a una funzione GROUP BY di includere valori nulli nel suo calcolo.

(6) Qualsiasi colonna o espressione nell'elenco di selezione che non sia una funzione di aggregazione deve trovarsi nella clausola group by

Esempi di funzioni di gruppo in Oracle

Creiamo prima le tabelle di esempio e poi proviamo il group by 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;

colonna singola

Select dept , avg(sal)   from emp  group by dept;

Più colonne

Select deptno ,job, sum(sal) from emp group by deptno,job

Funzione di conteggio

SELECT dept, COUNT(*) AS "Np of employees" FROM emp WHERE sal < 15000
GROUP BY dept;

Funzione minima

SELECT dept, MIN(sal) AS "Lowest salary" FROM emp 
GROUP BY dept;

Spero che questo articolo ti piaccia

Articoli correlati
Funzioni analitiche in Oracle :le funzioni analitiche Oracle calcolano un valore aggregato in base a un gruppo di righe utilizzando over partition by Oracle , differiscono dalle funzioni aggregate
rank in Oracle :RANK, DENSE_RANK e ROW_NUMBER sono Oracle Analytic funzione che vengono utilizzate per classificare le righe nel gruppo di righe chiamato window
Funzione Lead in Oracle:controlla la funzione LAG in Oracle e la funzione Lead in Oracle, come usarle nelle query analitiche e come funziona in Oracle sql
Le prime N query in Oracle:dai un'occhiata a questa pagina per esplorare i vari modi per ottenere le prime N query in Oracle e impaginazione nel database Oracle query Oracle.