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.