SQL 2 Gruppenfunktionen

From Coders.Bay Wiki
Jump to navigation Jump to search

Arithmetische Ausdrücke[edit]

Arithmetische Ausdrücke in den Select List Items oder / und in der WHERE Klausel

  • Addition
  • Subtraktion
  • Multiplikation
  • Division

Zu jedem Verkäufer soll der gesamte Gehalt ausgegeben werden.

SELECT ENAME,SAL,COMM,SAL+COMM
FROM EMP
WHERE JOB = 'SALESMAN'

Arithmetische und logische Ausdrücke können gemeinsam in der WHERE Klausel verwendet werden.


Ausgabe aller Mitarbeiter, deren Provision über 25% ihres Gehaltes liegt.

SELECT ENAME,SAL,COMM
FROM EMP
WHERE COMM > 0.25 * SAL;

Beispiele[edit]

Beispiel 1[edit]

Ausgabe aller Verkäufer in absteigender Reihenfolge bezüglich Verhältnis Provision-Gehalt.

SELECT ENAME,COMM/SAL,COMM,SAL
FROM EMP
WHERE JOB = 'SALESMAN'
ORDER BY COMM/SAL DESC;
Beispiel 2[edit]

Es soll der tägliche Gehalt (22 Arbeitstage im Monat) der Mitarbeiter aus Abteilung 30 berechnet werden. Dazu soll der berechnete Wert, der Wert gerundet auf Dollar und der Wert gerundet auf Cent ausgegeben werden.

SELECT ENAME, SAL, SAL/22, ROUND(SAL/22,0), ROUND(SAL/22,2)
FROM EMP
WHERE DEPTNO = 30;

Funktionen (kurzer Ausschnitt)[edit]

Funktion Beispiel Ergebnis
ABS
ABS(BALANCE)
Absolutwert von BALANCE
GREATEST
GREATEST(SAL,COMM)
Größerer Wert von SAL und COMM
LEAST
LEAST(SAL,COMM)
Kleinerer Wert von SAL und COMM
ROUND
ROUND(SAL,2)
Gehalt auf 2 Dezimalstellen gerundet
TRUNC
TRUNC(SAL,2)
Gehalt nach 2 Dezimalstellen abgeschnitten (nicht gerundet)
TO_NUMBER
TO_NUMBER(GRADEPT)
Character-Wert, der eine Zahl enthält, wird in einen numerischen Wert umgewandelt

Gruppenfunktionen[edit]

Bearbeiten eine Menge von Tupeln und liefern stets 1 Resultat für die betrachtete Gruppe.

DEPTNO SAL
10 5000




Maximales Gehalt aller beschäftigten
MAX(SAL)
----------
 5000
30 2850
10 2450
20 2975
30 1250
30 1600
30 1500
30 950


Gehaltssumme aller Beschäftigten der Abteilung 20
SUM(SAL)
----------
 10875
30 1250
20 3000
20 800
20 3000
20 1100
10 1300

Wichtige Gruppenfunktionen[edit]

Funktion Beispiel Ergebnis
AVG
AVG(SAL)
Durchschnittlicher Wert von SAL
COUNT
COUNT(COMM)
Anzahl der Werte in der Spalte COMM
MAX
MAX(SAL)
Höchster Wert von SAL
MIN
MIN(SAL)
Kleinster Wert von SAL
SUM
SUM(COMM)
Summenwert von COMM
Beispiele[edit]
Beispiel 1[edit]
SELECT AVG(SAL)
FROM EMP
WHERE JOB = 'CLERK';
Beispiel 2[edit]
SELECT SUM(SAL),SUM(COMM)
FROM EMP
WHERE JOB = 'SALESMAN';
Beispiel 3[edit]
SELECT 12 * AVG(SAL + COMM)
FROM EMP
WHERE JOB = 'SALESMAN';

COUNT[edit]

Die COUNT-Funktion zählt entweder die Anzahl von Nicht-Null-Werten oder die Anzahl unterschiedlicher Werte oder die Anzahl der Zeilen der Query.

Die Zahl der Mitarbeiter, die eine Provision erhalten dürfen, wird mit folgendem SELECT Kommando ermittelt:

SELECT COUNT(COMM)
FROM EMP;
Beispiele[edit]
Beispiel 1[edit]

Zahl der verschiedenen Jobs in Abteilung 30.

SELECT COUNT(DISTINCT JOB)
FROM EMP
WHERE DEPTNO = 30;
Beispiel 2[edit]

Anzahl der Mitarbeiter in Abteilung 30.

SELECT COUNT(*)
FROM EMP
WHERE DEPTNO = 30;

GROUP BY[edit]

  • Ein Kommando, das mit SELECT DEPTNO,AVG(SAL) FROM EMP… beginnt, ist normalerweise ungültig. DEPTNO hat einen Wert für jede ausgewählte Zeile, AVG(SAL) hat einen einzigen Wert für das gesamte Query.
  • Will man nun den durchschnittlichen Gehalt für jede Abteilung ermitteln, so könnte man für jede Abteilung je ein Query durchzuführen, um den durchschnittlichen Gehalt zu ermitteln.
  • Diese Information kann aber auch mit einem Query ermittelt werden, indem die GROUP BY Klausel verwendet wird. Die GROUP BY Klausel unterteilt eine Tabelle in Gruppen mit gleichen Werten in den entsprechenden Spalten.
Beispiele[edit]
Beispiel 1[edit]

Ausgabe der Durchschnittsgehälter in den Abteilungen.

SELECT DEPTNO, AVG(SAL)
FROM EMP
GROUP BY DEPTNO;

Die GROUP BY DEPTNO Klausel unterteilt die Mitarbeiter entsprechend ihrer Abteilungsnummer in Gruppen. Die Gruppenfunktion AVG(SAL) wird dann auf die Zeilen in jeder Gruppe angewandt.

Beispiel 2[edit]

Finde das jährliche Durchschnittsgehalt der Nicht-Führungskräfte in jeder Abteilung.

SELECT DEPTNO,12*AVG(SAL)
FROM EMP
WHERE JOB NOT IN (’MANAGER‘,‘PRESIDENT‘)
GROUP BY DEPTNO;
Beispiel 3[edit]

Bestimme die Mitarbeiteranzahl und das jährliche Durchschnittsgehalts pro Abteilung und pro Job.

SELECT DEPTNO,JOB,COUNT(*),12*AVG(SAL)
FROM EMP
GROUP BY DEPTNO,JOB;
Beispiel 4[edit]

Ausgabe des maximalen Durchschnittsgehalts der Beschäftigten über alle Abteilungen.

select max(avg(sal)) -- geschachtelte 
from emp             -- Gruppenfunktion
group by deptno
 MAX(AVG(SAL))
--------------
       2.9E+03

HAVING Klausel[edit]

Genau wie mit der WHERE Klausel spezielle Zeilen ausgewählt werden können, können mit Hilfe der HAVING Klausel spezielle Gruppen ausgewählt werden.

Beispiele[edit]
Beispiel 1[edit]

Durchschnittliche Jahresgehälter derjenigen Jobs, die von mehr als zwei Mitarbeitern ausgeführt werden.

SELECT JOB,COUNT(*),12*AVG(SAL)
FROM EMP
GROUP BY JOB
HAVING COUNT(*) > 2; 
Beispiel 2[edit]

Ausgabe aller Abteilungen mit wenigstens 2 Büroangestellten.

SELECT DEPTNO
FROM EMP
WHERE JOB = ’CLERK‘
GROUP BY DEPTNO
HAVING COUNT(*) >= 2;