Benutzer-Werkzeuge

Webseiten-Werkzeuge


opendocks:oracle-sql-nutshell-doku:nutshell-doku-03

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Nächste Überarbeitung
Vorhergehende Überarbeitung
opendocks:oracle-sql-nutshell-doku:nutshell-doku-03 [2026/04/08 18:22] – angelegt heikoopendocks:oracle-sql-nutshell-doku:nutshell-doku-03 [2026/04/15 15:34] (aktuell) heiko
Zeile 1: Zeile 1:
 ====== Aggregationen ====== ====== Aggregationen ======
 +
 ===== Group-Funktionen ===== ===== Group-Funktionen =====
 Auch Aggregatfunktionen genannt, berechnen einen einzigen Wert aus einer Menge von Zeilen. Auch Aggregatfunktionen genannt, berechnen einen einzigen Wert aus einer Menge von Zeilen.
  
-^Funktion^Beschreibung^ +^ Funktion ^ Beschreibung ^ 
-|''COUNT(*)''|Anzahl der Zeilen| +| ''COUNT(*)'' | Anzahl der Zeilen | 
-|''COUNT(spalte)''|Anzahl der nicht Null-Werte| +| ''COUNT(spalte)'' | Anzahl der nicht Null-Werte | 
-|''SUM(spalte)''|Summe der Spalteninhalte\\ Erwartet nur Zahlen oder Null| +| ''SUM(spalte)'' | Summe der Spalteninhalte \\ Erwartet nur Zahlen oder Null | 
-|''AVG(spalte)''|Durchschnitt der Spalteninhalte\\ Erwartet nur Zahlen oder Null| +| ''AVG(spalte)'' | Durchschnitt der Spalteninhalte \\ Erwartet nur Zahlen oder Null | 
-|''MAX(spalte)''|Größter Wert\\ Kann angewendet werden auf Zahlen, Datum und Text (VARCHAR2)\\ Funktioniert auf allen sortierbaren Datentypen| +| ''MAX(spalte)'' | Größter Wert \\ Kann angewendet werden auf Zahlen, Datum und Text (VARCHAR2) \\ Funktioniert auf allen sortierbaren Datentypen | 
-|''MIN(spalte)''|Kleinster Wert\\ Kann angewendet werden auf Zahlen, Datum und Text (VARCHAR2)\\ Funktioniert auf allen sortierbaren Datentypen| +| ''MIN(spalte)'' | Kleinster Wert \\ Kann angewendet werden auf Zahlen, Datum und Text (VARCHAR2) \\ Funktioniert auf allen sortierbaren Datentypen | 
-|''LISTAGG(spalte, trennzeichen)''|Werte zu einem String zusammenfassen| +| ''LISTAGG(spalte, trennzeichen)'' | Werte zu einem String zusammenfassen | 
-|''STDDEV(spalte)''|Standardabweichung (Die Wurzel der Varianz)\\ Kleine Standardabweichung = Werte liegen eng beieinander\\ Große Standardabweichung = Werte streuen stark| +| ''STDDEV(spalte)'' | Standardabweichung (Die Wurzel der Varianz) \\ Kleine Standardabweichung = Werte liegen eng beieinander \\ Große Standardabweichung = Werte streuen stark | 
-|''VARIANCE(spalte)''|Varianz (Durchschnitt der quadrierten Abweichungen vom Mittelwert)|+| ''VARIANCE(spalte)'' | Varianz (Durchschnitt der quadrierten Abweichungen vom Mittelwert) |
  
 **Wichtig!** **Wichtig!**
Zeile 35: Zeile 36:
  
 ===== Filter Funktion ===== ===== Filter Funktion =====
-''HAVING'' ist eine eigene Filter Klausel, die nach der Gruppierung eingesetzt wird.\\ +''HAVING'' ist eine eigene Filterklausel, die nach der Gruppierung eingesetzt wird. \\ 
-Dabei ist es möglich Aggregatfunktionen einzusetzen.\\+Dabei ist es möglichAggregatfunktionen einzusetzen. \\
 Beispiel: Beispiel:
 <code sql> <code sql>
Zeile 43: Zeile 44:
     where manager_id is not NULL      where manager_id is not NULL 
     group by manager_id      group by manager_id 
-    HAVING min(salary) > 6000 -- Hier werden alle Treffer mit SALARY>6000 aussortiert.+    HAVING min(salary) > 6000 -- Hier werden alle Treffer mit SALARY<6000 aussortiert.
     order by min(SALARY) desc;     order by min(SALARY) desc;
 </code> </code>
  
 +===== WICHTIG! Reihenfolge der Abarbeitung eines Querys =====
 +SQL-Klauseln werden in einer festgelegten **logischen Reihenfolge** abgearbeitet:
 +<code>
 +FROM -> WHERE -> GROUP BY -> HAVING -> SELECT -> ORDER BY
 +</code>
 +
 +Damit wäre der folgende Query **falsch**:
 +<code sql>
 +SELECT last_name, salary,
 +       ROW_NUMBER() OVER (ORDER BY salary DESC) AS rn
 +FROM employees
 +WHERE rn <= 10;  -- ORA-00904: "RN": invalid identifier
 +</code>
 +''WHERE'' wird **vor** dem ''SELECT'' ausgewertet. Also zu dem Zeitpunkt, wo ''WHERE'' läuft, existiert der Alias ''rn'' noch gar nicht, da er erst in der ''SELECT''-Phase berechnet wird. \\
 +Damit der Query läuft, muss man sich als Workaround die Tatsache zu eigen machen, dass geklammerte Querys immer von innen nach außen berechnet werden. \\
 +Beispiel:
 +<code sql>
 +SELECT last_name, salary
 +FROM (
 +    SELECT last_name, salary,
 +           ROW_NUMBER() OVER (ORDER BY salary DESC) AS rn
 +    FROM employees
 +)
 +WHERE rn <= 10;
 +</code>
 +
 +**Dasselbe Problem gilt übrigens auch für** ''ORDER BY'' — auch da kann man berechnete Spalten aus dem ''SELECT'' normalerweise nicht in ''WHERE'' referenzieren, aber in ''ORDER BY'' schon (das ist eine spezielle Ausnahme des Standards).
 +
 +[[opendocks:oracle-sql-nutshell-doku:nutshell-doku-02|Zurück]] - [[opendocks:oracle-sql-nutshell-doku:nutshell-doku-04|Weiter]]
opendocks/oracle-sql-nutshell-doku/nutshell-doku-03.1775665358.txt.gz · Zuletzt geändert: 2026/04/08 18:22 von heiko

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki