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

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
opendocks:oracle-sql-nutshell-doku:nutshell-doku-03 [2026/04/08 18:36] 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 47: Zeile 48:
 </code> </code>
  
-[[opendocks:oracle-sql-nutshell-doku:nutshell-doku-02|Zurück]]+===== 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.1775666171.txt.gz · Zuletzt geändert: 2026/04/08 18:36 von heiko

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki