Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Agregowanie danych za pomocą funkcji grupowych (grupuj według wyroczni)

W ramach samouczka dotyczącego Oracle SQL, oto szczegółowe informacje na temat grupy według wyroczni

Funkcje grupowe, w przeciwieństwie do funkcji jednowartościowych, działają na zestawie wierszy i zwracają jeden wiersz na grupę. Zbiór wierszy może składać się z całej tabeli lub tabeli podzielonej na grupy

Typy funkcji grupowych w Oracle obejmują:

ŚREDNIA([Wyróżnione/wszystkie] n) Tylko liczbowe typy danych. Średnia wartość kolumny n ignorująca wartości null
LICZBA({*/[Distinct/all]expr}) Jest to tylko funkcja grupowa, która zawiera wartości null. Zlicza liczbę wierszy w instrukcji select, która spełnia warunki klauzuli where. Count(*) zawiera wszystkie wartości null i zduplikowane
MAX([Distinct/all]  expr) Może być używany z dowolnym typem danych. Daje maksymalną wartość ignorowania wartości pustych
MIN([Distinct/all]  expr) Może być używany z dowolnym typem danych. . Daje minimalną wartość ignorowania wartości pustych
STDDEV([Rozdzielne/wszystkie] n) Tylko liczbowe typy danych. Daje odchylenie standardowe n ignorowania wartości zerowych
SUM ([Wyróżnione/wszystkie]  n) Tylko liczbowe typy danych i nie mogą mieć innych operatorów arytmetycznych w funkcji. Zapewnia sumę n ignorowanych wartości pustych
VARIANCE([Distinct/all] n) Tylko liczbowe typy danych. Daje wariancję n ignorowania wartości pustych

Składnia:

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

Serwer Oracle wykonał następujące kroki

  • Najpierw wiersze są wybierane na podstawie klauzuli gdzie
  • Wiersze są pogrupowane
  • Funkcja grupowa jest stosowana do każdej grupy
  • Wyświetlana jest grupa, która pasuje do kryterium w klauzuli posiadającej

Zatem klauzula WHERE jest oceniana jako pierwsza (ogranicza wyniki zapytania), następnie klauzula GROUP BY (grupuje wyniki klauzuli WHERE), a następnie klauzula HAVING (dalsze ogranicza wyniki, ograniczając zwracane grupy).

Kilka ważnych punktów dotyczących grupowania według wyroczni

(1) GROUP BY:Dzieli wyniki funkcji grupowania z jednej dużej tabeli danych na mniejsze logiczne grupy.

(2) Klauzula WHERE nie może ograniczać grupy, więc użyj klauzuli HAVING.

(3) Nie używaj aliasu kolumny w klauzuli GROUP BY.

(4) POSIADAJĄCY:ogranicza wyświetlanie grup do tych, które „mają” określone warunki.

(5) Funkcja NVL pozwala funkcji GROUP BY na uwzględnienie w obliczeniach wartości zerowych.

(6) Każda kolumna lub wyrażenie na liście wyboru, które nie jest funkcją agregującą, musi znajdować się w klauzuli group by

Przykłady funkcji grupowych w Oracle

Stwórzmy najpierw przykładowe tabele, a następnie wypróbujmy grupowanie według 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;

Pojedyncza kolumna

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

Wiele kolumn

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

Funkcja zliczania

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

Funkcja minimalna

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

Mam nadzieję, że podoba Ci się ten artykuł

Powiązane artykuły
Funkcje analityczne w Oracle :Funkcje analityczne Oracle obliczają wartość zagregowaną na podstawie grupy wierszy przy użyciu klauzuli over partition by oracle , różnią się one od funkcji agregujących
rank w Oracle:RANK, DENSE_RANK i ROW_NUMBER są analityczne Oracle funkcja służąca do uszeregowania wierszy w grupie wierszy o nazwie window
Funkcja Lead w Oracle :Sprawdź funkcję LAG w Oracle i funkcję Lead w Oracle, jak ich używać w zapytaniach analitycznych i jak to działa w Oracle sql
Najczęstsze zapytania w Oracle :Sprawdź tę stronę, aby zapoznać się z różnymi sposobami uzyskania Top-N zapytań w Oracle i paginacji w bazie danych Oracle zapytań Oracle.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy możliwe jest zakleszczenie podczas aktualizowania i usuwania różnych wierszy w tabeli?

  2. jak odzyskać zapasową bazę danych z brakującego dziennika archiwum?

  3. ORA-65139:Niezgodność między plikiem metadanych XML a plikiem danych

  4. Oracle JDBC:nieprawidłowa nazwa użytkownika/hasło (ora-01017)

  5. Entity Framework i wiele schematów