Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Aggregieren von Daten mithilfe von Gruppenfunktionen (Gruppe nach Orakel)

Als Teil des Oracle SQL-Lernprogramms finden Sie hier gute Details zur Gruppierung nach Oracle

Gruppenfunktionen arbeiten im Gegensatz zu Einzelwertfunktionen auf dem Satz von Zeilen und geben eine Zeile pro Gruppe zurück. Der Zeilensatz kann eine ganze Tabelle oder die in Gruppen aufgeteilte Tabelle sein

Arten von Gruppenfunktionen in Oracle umfassen:

AVG([Distinct/all]  n) Nur numerische Datentypen. Der Durchschnittswert der Spalte n, wobei Nullwerte ignoriert werden
COUNT({*/[Distinct/all]expr}) Es ist nur eine Gruppenfunktion, die Nullwerte enthält. Es zählt die Anzahl der Zeilen in der select-Anweisung, die die where-Klausel erfüllt. Count(*) enthält alle Null- und Duplikatwerte
MAX([Distinct/all]  expr) Es kann mit jedem Datentyp verwendet werden. Es gibt den maximalen Wert von expr an, wobei Nullwerte ignoriert werden
MIN([Distinct/all]  expr) Es kann mit jedem Datentyp verwendet werden. . Es gibt einen Mindestwert von expr an, wobei Nullwerte ignoriert werden
STDDEV([Eindeutig/alle]  n) Nur numerische Datentypen. Es ergibt eine Standardabweichung von n, wobei Nullwerte ignoriert werden
SUMME ([Eindeutig/alle]  n) Nur numerische Datentypen und keine anderen arithmetischen Operatoren in der Funktion. Sie liefert die Summe von n, wobei Nullwerte ignoriert werden
VARIANCE([Eindeutig/alle]  n) Nur numerische Datentypen. Es gibt eine Varianz von n, wobei Nullwerte ignoriert werden

Syntax:

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

Der Oracle-Server hat die folgenden Schritte ausgeführt

  • Zuerst werden die Zeilen basierend auf der Where-Klausel ausgewählt
  • Zeilen werden gruppiert
  • Die Gruppenfunktion wird auf jede Gruppe angewendet
  • Die Gruppe, die dem Kriterium in der Having-Klausel entspricht, wird angezeigt

Daher wird zuerst die WHERE-Klausel ausgewertet (schränkt die Abfrageergebnisse ein), dann die GROUP BY-Klausel (gruppiert die Ergebnisse von WHERE), dann die HAVING-Klausel (weitere Einschränkung der Ergebnisse durch Einschränkung der zurückgegebenen Gruppen).

Einige wichtige Punkte zur Gruppierung nach Orakel

(1) GROUP BY:Zerlegt die Ergebnisse von Gruppenfunktionen aus einer großen Datentabelle in kleinere logische Gruppierungen.

(2) Die WHERE-Klausel kann eine Gruppe nicht einschränken, verwenden Sie also die HAVING-Klausel.

(3) Verwenden Sie den Spaltenalias nicht in der GROUP BY-Klausel.

(4) HAVING:Beschränkt die Anzeige von Gruppen auf diejenigen, die die angegebenen Bedingungen „haben“.

(5) Die NVL-Funktion ermöglicht es einer GROUP BY-Funktion, Nullwerte in ihre Berechnung aufzunehmen.

(6) Alle Spalten oder Ausdrücke in der Auswahlliste, die keine Aggregatfunktion sind, müssen in der group by-Klausel

enthalten sein

Beispiele für Gruppenfunktionen in Oracle

Lassen Sie uns zuerst die Beispieltabellen erstellen und dann die Gruppierung nach Oracle sql

ausprobieren
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;

Eine Spalte

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

Mehrspaltig

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

Zählfunktion

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

Min-Funktion

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

Ich hoffe, Ihnen gefällt dieser Artikel

Verwandte Artikel
Analytische Funktionen in Oracle:Oracle Analytische Funktionen berechnen einen aggregierten Wert basierend auf einer Gruppe von Zeilen, indem sie die Klausel over partition by oracle verwenden, sie unterscheiden sich von aggregierten Funktionen
Rang in Oracle:RANK, DENSE_RANK und ROW_NUMBER sind orakelanalytisch Funktion, die verwendet wird, um Zeilen in der Gruppe von Zeilen mit dem Namen Fenster zu ordnen br/>Top-N-Abfragen in Oracle:Schauen Sie sich diese Seite an, um die verschiedenen Möglichkeiten zu erkunden, Top-N-Abfragen in Oracle und Paginierung in Oracle-Abfragen und Oracle-Datenbanken zu erreichen.