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.