sql >> Databasteknik >  >> RDS >> Oracle

Aggregera data med hjälp av gruppfunktioner (gruppera efter orakel)

Som en del av att lära sig Oracle SQL-självstudier, här är bra detaljer om gruppen för oracle

Gruppfunktioner till skillnad från funktioner med enstaka värden fungerar på uppsättningen rader och returnerar en rad per grupp. Uppsättningen rader kan vara en hel tabell eller tabellen uppdelad i grupper

Typer av gruppfunktioner i Oracle inkluderar:

AVG([Distinct/alla]  n) Endast numeriska datatyper. Medelvärdet för kolumnen n ignorerar nullvärden
COUNT({*/[Distinct/all]expr}) Det är bara en gruppfunktion som innehåller nollvärden. Den räknar antalet rader i select-satsen som uppfyller where-satsen. Count(*) inkluderar alla null- och dubblettvärden
MAX([Distinct/alla]  expr) Den kan användas med vilken datatyp som helst. Det ger det maximala värdet av expr som ignorerar nullvärden
MIN([Distinct/alla]  expr) Den kan användas med vilken datatyp som helst. . Det ger ett lägsta värde på expr som ignorerar nullvärden
STDDEV([Distinkt/alla]  n) Endast numeriska datatyper. Det ger en standardavvikelse på n och ignorerar nullvärden
SUMMA ([Distinkt/alla]  n) Endast numeriska datatyper och kan inte ha andra aritmetiska operatorer i function.it ger summan av n ignorerar nollvärden
VARIANS([Distinkt/alla]  n) Endast numeriska datatyper. Det ger varians av n ignorerar nullvärden

Syntax:

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

Oracle-servern utförde följande steg

  • Först väljs raderna baserat på where-satsen
  • Rader är grupperade
  • Gruppfunktionen tillämpas på varje grupp
  • Gruppen som matchar kriteriet i having-satsen visas

Så WHERE-satsen utvärderas först (begränsar frågeresultaten), sedan GROUP BY-satsen (grupperar resultaten av WHERE), sedan HAVING-satsen (begränsar resultaten ytterligare genom att begränsa de grupper som returneras).

Några viktiga punkter om grupper efter orakel

(1) GROUP BY:Bryter ner resultaten av gruppfunktioner från en stor datatabell till mindre logiska grupperingar.

(2) WHERE-satsen kan inte begränsa en grupp, så använd HAVING-satsen.

(3) Använd inte kolumnaliaset i GROUP BY-satsen.

(4) HAR:begränsar visningen av grupper till de som "har" de angivna villkoren.

(5) NVL-funktionen tillåter en GROUP BY-funktion att inkludera nollvärden i sin beräkning.

(6) Alla kolumner eller uttryck i urvalslistan som inte är en aggregerad funktion måste finnas i group by-satsen

Exempel på gruppfunktioner i Oracle

Låt oss först skapa exempeltabellerna och sedan prova gruppen med 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;

Enkel kolumn

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

Flera kolumner

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

Räknefunktion

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;

Hoppas du gillar den här artikeln

Relaterade artiklar
Analytiska funktioner i Oracle :Oracle Analytiska funktioner beräknar ett aggregerat värde baserat på grupp av rader genom att använda överpartition efter oracle-sats , de skiljer sig från aggregerade funktioner
rankas i Oracle:RANK, DENSE_RANK och ROW_NUMBER är orakelanalytiska funktion som används för att rangordna rader i gruppen av rader som kallas fönster
Lead-funktion i Oracle :Kolla in LAG-funktionen i Oracle &Lead-funktion i Oracle, hur man använder dem i analytiska frågor och hur det fungerar i Oracle sql
Top-N-frågor i Oracle:Kolla in den här sidan om att utforska de olika sätten att uppnå Top-N-frågor i Oracle och paginering i Oracle-frågeoracle-databasen.


  1. Databaskorrpution i MS Access och hur man handskas

  2. SQL NOT Operator

  3. Så här åtgärdar du ett fel för överskriden låsväntetid i MySQL

  4. Beställ en MySQL-tabell med två kolumner